|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectds.ov2.front.RSA_mont_card
public class RSA_mont_card
Protocol methods for the Montgomerizing RSA applet. The code here
is very similar to RSA_plain_card
and RSA_squared_card
. There are however enough differences to make a
gerneralized unified class a mess. All three applets, the
Montgomerizing, the plain RSA and the squaring RSA applet are very
similar. For simplicity even all protocol steps are identical
(although not all of the data that is transfered during applet
personalization is used in all applets). Most differences between
the two applets are just treated by conditionals. Only for this
class the differences are too big to cover them all nicely in
conditionals.
The Montgomerizing RSA applet computes everything on the JCVM, without using the crypto coprocessor. Everything is done with Montgomery muliplication. To spare some (de)montgomerizations on the card many numbers in the communication with the host are montgomerized. The applet needs no Montgomery correction factors, but it needs 2 Montgomery digits.
This class contains the methods that are called from the actions in
the protocol steps. Some of the necessary temporary values are
defined and allocated here. Most of the necessary data is however
in RSA_data
. The temporary values defined here do not take
part in the communication with the host. Therefore this class does
not need to be present in the host driver.
The applet is always in one of four states, see the explanations in
RSA_data
.
All computations use solely Montgomery multiplication. Therefore everything (except for the exponents) has to be montgomerized. Data received from and sent to the host is Montgomerized too.
Field Summary | |
---|---|
private Vector |
alphas
Alphas and quotients. |
(package private) Bignat |
beta_1
Random beta_1 from the resign protocol and beta from the proof protocoll. |
(package private) Bignat |
beta_2
Random beta_2 from the resign protocol. |
(package private) RSA_data |
data
Static data and data send and received from the host. |
private Bignat |
double_small
Intermediate value of double small size. |
(package private) Front_protocols |
front_protocols
Registered protocols instance. |
(package private) MessageDigest |
hash
Message digest for computing 160 bit SHA-1. |
static PrintWriter |
out
Debug printer. |
private RandomData |
rand
Random number generator of type RANDOM. |
(package private) Bignat |
sig_quotient
Qutient d in the signature protocol. |
private Bignat |
temp_2
Temporary. |
private Bignat |
temp_3
Temporary. |
private Vector |
temp_base_vec
Temporary base vector of length 2. |
(package private) Bignat |
temp_blinded_a
Temporary blinded attribute expression. |
private Vector |
temp_exp_vec
Temporary exponent vector of length 2. |
Constructor Summary | |
---|---|
RSA_mont_card(RSA_data data,
Front_protocols front_protocols)
Non-allocating constructor. |
Method Summary | |
---|---|
void |
allocate(short short_bignat_size,
short long_bignat_size,
short attribute_length,
short mont_correction_len)
Allocate all data of the applet. |
void |
finish_signature(APDU_boolean accept)
Third step of the resign protocol. |
void |
initialize()
Initialize the plain RSA applet data structures. |
void |
make_sig_hash()
Second step of the resign protocol. |
void |
proof_commit()
First step of the gate or proof protocol. |
void |
respond_to_challenge()
Second step of the gate or proof protocol. |
void |
switch_to_new_attributes(APDU_boolean success)
Atomically switch to various new values. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
Front_protocols front_protocols
switch_to_new_attributes
.)
RSA_data data
private Bignat temp_2
temp_3
and RSA_data.result
in various computations.
Long bignat.
private Bignat temp_3
temp_2
and RSA_data.result
in various computations.
Long bignat.
private Vector alphas
RSA_data.remainders
.)
The last element with index RSA_data.attribute_length
is always an alias of either RSA_data.v
or RSA_data.gamma_beta_3
.
In the resign protocol the vector is not used except for its
first entry (at index 0), which aliased under sig_quotient
and which stores the quotient there.
Length RSA_data.attribute_length
+ 1. Filled with short
bignats.
private Bignat double_small
Bignat beta_1
Long bignat.
Bignat beta_2
Long bignat.
Bignat temp_blinded_a
Long bignat.
Bignat sig_quotient
RSA_data.sig_remainder
). Alias of alphas
[0], which are otherwise not used during resigning.
Short bignat.
private RandomData rand
MessageDigest hash
private Vector temp_base_vec
Contains precisely two aliases of long bignats.
private Vector temp_exp_vec
Contains precisely two aliases of short bignats.
public static PrintWriter out
Constructor Detail |
---|
public RSA_mont_card(RSA_data data, Front_protocols front_protocols)
data
and front_protocols
fields. Sets the State to UNALLOCTED
when finished.
Allocation of all the bignats and vectors has to be done
explicitely with allocate(short, short, short, short)
.
data
- the data instancefront_protocols
- the protocols instanceMethod Detail |
---|
public void allocate(short short_bignat_size, short long_bignat_size, short attribute_length, short mont_correction_len)
RSA_data
and this class is allocated during applet
installation. Afterwards this method must be called in order to
allocate all further data structures (mainly bignats and
vectors).
The decision whether to allocate the data in RAM (transient
memory) or EEProm is hardwired here and in RSA_data.allocate(short, short, short, short, byte)
. It works for cards with about 2K of RAM up
to 1952 bit keys. If there is too little RAM or the key
size is too big strange things will happen.
Asserts that the state
is UNALLOCTED
. Sets the state to
UNINITIALIZED
when finished (see
applet state
description).
short_bignat_size
- size in bytes of the short (exponent) bignatslong_bignat_size
- size in bytes of the long (base) bignatsattribute_length
- number of attributes (without counting
the blinding)mont_correction_len
- length of the data.montgomery_corrections
arraypublic void initialize()
allocation
and before the
first resigning.
Before this method is entered the OV-chip protocol layer transfers the following data as arguments of the initialize step into the right place:
data
.n
data
.v
(indirectly via RSA_data.current_attributes
)data
.ptls_key
data
.bases
data
.base_factors
data
.current_attributes
data
.current_blinding
(indirectly via RSA_data.bases
)data
.RSA_data.montgomerized_one
data
.montgomery_corrections
Asserts that the applet is in state UNINITIALIZED
. After completion the
state is set to INITIALIZED
(see
applet state
description).
The source code of this method is affected by Brand's patents on selective disclosure protocols that are now in the posession of Microsoft. Microsoft lawyers are still pondering our request from January 2009 for making the full source code publically available. The source code of this method is therefore currently not publically available. The detailed operations of this method are:
RSA_data.state
contains UNINITIALIZED
RSA_data.mod_first_digit_mask
, RSA_data.v_first_digit_mask
Bignat.get_first_digit_mask
, an important subtlety here is
that because of the Montgomery
digits the index of the first digit of the modulus in
data.n.m
is 2.
data.current_blinded_a
data.bases
^data.current_attributes
with
data.bases.mont_rsa_exponent_mod
. Because in this method the result
and first temporary is used heavily in the multiplication, it
is wise to use data.result
as first
temporary and copy
the result afterwards
into data.current_blinded_a
.
Note that the RSA_data.current_blinding
and the RSA_data.v
are alias in the bases and current_attributes
vector at index RSA_data.attribute_length
+ 1. Because
of the blinding one has to use a montgomery correction factor
for data.attribute_length + 1
factors, see data.get_montgomery_correction
.
RSA_data.state
INITIALIZED
There are no results sent back to the host by the OV-chip protocol layer after this method has finished.
public void switch_to_new_attributes(APDU_boolean success)
finish_signature
step of the resign protocol the new_*
versions are atomically copied into the current_* ones. This is
done in this method by swapping references.
Swapping the references introduces a little problem in the
protocol layer: The layer also has aliases for instance of
RSA_data.current_blinded_a
and of RSA_data.current_signature
. After swapping references, these
aliases suddenly alias invalid data. Therefore one has to
uptate the step data structure with front_protocols.update_steps
.
The source code of this method is affected by Brand's patents on selective disclosure protocols that are now in the posession of Microsoft. Microsoft lawyers are still pondering our request from January 2009 for making the full source code publically available. The source code of this method is therefore currently not publically available. The detailed operations of this method are:
data.current_attributes
, data.current_blinding
, data.current_blinded_a
and data.current_signature
,
respectively.
success
is still false and that
data.new_attributes
aliases
data.v
at index data.attribute_length
.
Misc.begin_transaction()
in order to be
compatible with the HOST_TESTFRAME
Front_protocols.update_steps()
BLINDED
if it was INITIALIZED
, set success
to true
and commit the
transaction with
Misc.commit_transaction()
success
- alias of RSA_card_protocol_description.signature_accepted
, initially
false, set to true when the atomic swapping succeedspublic void make_sig_hash()
RSA_data.applet_id
, RSA_data.current_blinded_a
and
RSA_data.current_signature
are sent to the host in the
first step.) Prior to calling this method the protocol layer receives
RSA_data.host_alpha
RSA_data.remainders
; these
updates are in modulo format: to subract x
from an
attribute, the host sends RSA_data.v
- x
.
After this method the protocol layer sends the remainder c in
RSA_data.sig_remainder
.
Asserts that the applet is in state INITIALIZED
or BLINDED
(see applet state
description).
The source code of this method is affected by Brand's patents on selective disclosure protocols that are now in the posession of Microsoft. Microsoft lawyers are still pondering our request from January 2009 for making the full source code publically available. The source code of this method is therefore currently not publically available. The detailed operations of this method are:
INITIALIZED
or BLINDED
.
RSA_data.new_attributes
double_small
, where the update is added and the
remainder modulo data.v
is taken. Finally
the remainder in double_small
is copied into the
data.new_attributes
. The alias
to data.v
at index data.attribute_length
in data.new_attributes
must not be
touched.
public void finish_signature(APDU_boolean accept)
data
.host_response
. After this
method the protocol layer sends the boolean result of this
method in RSA_card_protocol_description.signature_accepted
.
Sets the state of the applet to BLINDED
if it was INITIALIZED
(see applet state
description).
If the host response passes the acceptance check this method
computes the final signature and starts a transaction to switch
to the new attributes and the new signature. If all this goes
through the result value in accept
is set to true.
Otherwise it remains false when this method finishes.
The source code of this method is affected by Brand's patents on selective disclosure protocols that are now in the posession of Microsoft. Microsoft lawyers are still pondering our request from January 2009 for making the full source code publically available. The source code of this method is therefore currently not publically available.
accept
- reference to the accept result of this method,
equal to RSA_card_protocol_description.signature_accepted
,
will be true when returning from this method precisely if the
applet accepts the new signature and the transaction for
changing to the new attributes and the new signature succeeded.public void proof_commit()
data
.applet_id
to let the host distinguish
between the plain and the Montgomerizing applet,data
.current_blinded_a
,
data
.current_signature
, anddata
.result
Asserts that the applet is in the state BLINDED
(see applet state
description).
The source code of this method is affected by Brand's patents on selective disclosure protocols that are now in the posession of Microsoft. Microsoft lawyers are still pondering our request from January 2009 for making the full source code publically available. The source code of this method is therefore currently not publically available.
public void respond_to_challenge()
data
.gamma_beta_3
. After this method the protocol layer sends the
following data to the host:
data
.remainders
data
.result
The source code of this method is affected by Brand's patents on selective disclosure protocols that are now in the posession of Microsoft. Microsoft lawyers are still pondering our request from January 2009 for making the full source code publically available. The source code of this method is therefore currently not publically available.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |