Home | History | Annotate | Download | only in notes
      1 Tech Note 0006
      2 PK Standards Compliance
      3 Tom St Denis
      4 
      5 RSA
      6 ----
      7 
      8 PKCS #1 compliance.
      9 
     10 Key Format:  RSAPublicKey and RSAPrivateKey as per PKCS #1 v2.1
     11 Encryption:  OAEP as per PKCS #1
     12 Signature :  PSS  as per PKCS #1
     13 
     14 DSA
     15 ----
     16 
     17 The NIST DSA algorithm
     18 
     19 Key Format:  HomeBrew [see below]
     20 Signature :  ANSI X9.62 format [see below].
     21 
     22 Keys are stored as 
     23 
     24 DSAPublicKey ::= SEQUENCE {
     25     publicFlags    BIT STRING(1), -- must be 0
     26     g              INTEGER      , -- base generator, check that g^q mod p == 1
     27                                   -- and that 1 < g < p - 1
     28     p              INTEGER      , -- prime modulus 
     29     q              INTEGER      , -- order of sub-group (must be prime)
     30     y              INTEGER      , -- public key, specifically, g^x mod p, 
     31                                   -- check that y^q mod p == 1
     32                                   -- and that 1 < y < p - 1
     33 }
     34 
     35 DSAPrivateKey ::= SEQUENCE {
     36     publicFlags    BIT STRING(1), -- must be 1
     37     g              INTEGER      , -- base generator, check that g^q mod p == 1
     38                                   -- and that 1 < g < p - 1
     39     p              INTEGER      , -- prime modulus 
     40     q              INTEGER      , -- order of sub-group (must be prime)
     41     y              INTEGER      , -- public key, specifically, g^x mod p, 
     42                                   -- check that y^q mod p == 1
     43                                   -- and that 1 < y < p - 1
     44     x              INTEGER        -- private key
     45 }
     46 
     47 Signatures are stored as 
     48 
     49 DSASignature ::= SEQUENCE {
     50     r, s           INTEGER        -- signature parameters
     51 }
     52 
     53 ECC
     54 ----
     55 
     56 The ANSI X9.62 and X9.63 algorithms [partial].  Supports all NIST GF(p) curves.
     57 
     58 Key Format   :  Homebrew [see below, only GF(p) NIST curves supported]
     59 Signature    :  X9.62 compliant
     60 Encryption   :  Homebrew [based on X9.63, differs in that the public point is stored as an ECCPublicKey]
     61 Shared Secret:  X9.63 compliant
     62 
     63 ECCPublicKey ::= SEQUENCE {
     64     flags       BIT STRING(1), -- public/private flag (always zero), 
     65     keySize     INTEGER,       -- Curve size (in bits) divided by eight 
     66                                -- and rounded down, e.g. 521 => 65
     67     pubkey.x    INTEGER,       -- The X co-ordinate of the public key point
     68     pubkey.y    INTEGER,       -- The Y co-ordinate of the public key point
     69 }
     70 
     71 ECCPrivateKey ::= SEQUENCE {
     72     flags       BIT STRING(1), -- public/private flag (always one), 
     73     keySize     INTEGER,       -- Curve size (in bits) divided by eight 
     74                                -- and rounded down, e.g. 521 => 65
     75     pubkey.x    INTEGER,       -- The X co-ordinate of the public key point
     76     pubkey.y    INTEGER,       -- The Y co-ordinate of the public key point
     77     secret.k    INTEGER,       -- The secret key scalar
     78 }
     79 
     80 The encryption works by finding the X9.63 shared secret and hashing it.  The hash is then simply XOR'ed against the message [which must be at most the size
     81 of the hash digest].  The format of the encrypted text is as follows
     82 
     83 ECCEncrypted ::= SEQUENCE {
     84     hashOID     OBJECT IDENTIFIER,   -- The OID of the hash used
     85     pubkey      OCTET STRING     ,   -- Encapsulation of a random ECCPublicKey
     86     skey        OCTET STRING         -- The encrypted text (which the hash was XOR'ed against)
     87 }
     88 
     89 % $Source: /cvs/libtom/libtomcrypt/notes/tech0006.txt,v $   
     90 % $Revision: 1.2 $   
     91 % $Date: 2005/06/18 02:26:27 $ 
     92