~ubuntu-branches/ubuntu/utopic/dropbear/utopic-proposed

« back to all changes in this revision

Viewing changes to libtomcrypt/notes/tech0006.txt

  • Committer: Bazaar Package Importer
  • Author(s): Matt Johnston
  • Date: 2005-12-08 19:20:21 UTC
  • mfrom: (1.2.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20051208192021-nyp9rwnt77nsg6ty
Tags: 0.47-1
* New upstream release.
* SECURITY: Fix incorrect buffer sizing.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 $