gzz-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gzz-commits] manuscripts/Sigs article.rst poss.py internal.rst


From: Tuomas J. Lukka
Subject: [Gzz-commits] manuscripts/Sigs article.rst poss.py internal.rst
Date: Mon, 19 May 2003 09:35:55 -0400

CVSROOT:        /cvsroot/gzz
Module name:    manuscripts
Changes by:     Tuomas J. Lukka <address@hidden>        03/05/19 09:35:55

Modified files:
        Sigs           : article.rst poss.py 
Added files:
        Sigs           : internal.rst 

Log message:
        restart article

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/manuscripts/Sigs/internal.rst?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/manuscripts/Sigs/article.rst.diff?tr1=1.106&tr2=1.107&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/manuscripts/Sigs/poss.py.diff?tr1=1.10&tr2=1.11&r1=text&r2=text

Patches:
Index: manuscripts/Sigs/article.rst
diff -u manuscripts/Sigs/article.rst:1.106 manuscripts/Sigs/article.rst:1.107
--- manuscripts/Sigs/article.rst:1.106  Mon May 19 09:18:32 2003
+++ manuscripts/Sigs/article.rst        Mon May 19 09:35:54 2003
@@ -1,735 +1,3 @@
 ===============================
 One-time Signature Key Boosting
 ===============================
-
-..  raw:: latex
-
-    \begin{abstract}
-    We propose an unlimited-time digital signature scheme based
-    on a one-time signature scheme and a random oracle.
-    The random oracle is used to map a private key deterministically
-    to a 
-    set of new private keys. 
-    The original private key is used (through a hash tree)
-    to sign the new 
-    private keys.
-    For each message, one of the new keys is chosen,
-    and this process is iterated for a number
-    of times to obtain the final private key used to sign
-    the actual message. The signature consists of
-    the chain of signatures from the original public key
-    to the final signature.
-
-    On a theoretical level, our scheme allows the construction
-    of a feasible algorithm with the full digital signature feature
-    set without using a trapdoor function, i.e. without
-    relying on
-    number-theoretic assumptions such as the hardness
-    of factoring or discrete logs. 
-
-    This scheme is existentially
-    unforgeable with an adaptive chosen message attack.
-    As long as the random oracle, used to generate the new private keys
-    and to implement the one-time signatures, 
-    isn't broken, an exhaustive
-    key search is the only way to break the scheme.
-    \end{abstract}
-
-..  The detailed characteristics of the algorithm are determined
-    by the one-time signature scheme used,
-    the number of iterations,
-    and the algorithm for choosing which private key to use.
-
-..  Additionally, rejecting invalid signatures can be 
-    significantly faster than in RSA-like systems.
-    On the other hand, signing is comparatively slow
-    and signatures can be large.
-
-
-Introduction
-============
-
-One-time signatures were originally proposed independently
-by [XXX] and [XXX]. Since then, numerous variations
-and improvements have been published [XXX].
-Despite their limitations, one-way signatures have
-attracted considerable interest because
-their operation 
-does not
-rely on
-trapdoor functions, whose strength is based on
-unproven number-theoretic assumptions such as the
-difficulty of factoring large integers [XXX]. 
-
-This is important for, e.g., long-term digital publishing
-where the usual recommended digital signature expiration 
-time of two years[XXX] is inconvenient.
-
-
-In this article, we introduce a new signature scheme,
-based on one-time signatures and a random oracle,
-that can be used any number of times without keeping track
-of private keys that have already been used.
-In the following Sections, we first 
-review one-time signatures, and subsequently
-describe our algorithm. 
-Then, we analyze the tradeoffs in it and other one-time signature
-schemes. 
-After this, we discuss the different variants of our
-algorithm based on how the path through the key tree
-is selected, and finally conclude.
-
-One-time Signatures
-===================
-
-..  Also, in practice,
-    a cryptographic hash function is used in most
-    signature schemes anyway to map messages to a
-    fixed-length digest, which is then signed. As
-    cryptographic hash functions are one-way, also using them
-    as the basis for signature avoids introducing additional
-    cryptographic primitives into the system.
-    Additionally, operations on one-way signatures
-    may be orders of magnitude faster than operations
-    in schemes like DSA or RSA.
-
-One-time signature schemes [XXX] are based 
-on one-way functions, i.e., functions `$y=f(x)$` such
-as block ciphers or cryptographic hashes so that
-that given `$y$` it is infeasible to find `$x$`.
-Generally, given a one-way function f, the signer generates a set
-of (pseudo)random numbers and and publishes `$f(x)$` for each
-`$x$` in the set. This is the public key. To sign a message,
-the signer employs a deterministic algorithm to select
-a subset of the random numbers, and publishes them
-as the signature. The signature can be verified by running
-the same deterministic algorithm, checking that the
-resultant set of numbers has been published, and comparing
-f(x) for each published number x against the values
-in the public key.
-
-To prevent an attacker from using a subset of the
-published numbers to sign a different message,
-the deterministic algorithm is chosen so that no set
-in its range is a true subset of any other set in its range,
-or that finding such a pair of sets is infeasible.
-
-Private keys in one-time signature schemes can generally
-only be used to sign a single message. If the same key 
-were used to sign multiple messages, an attacker might
-be able to combine the random numbers published in each
-signature to find a new valid signature.
-However, some schemes have been recently proposed that
-allow a small number of messages to be signed without
-becoming completely insecure [BiBa-andalso-betterthanbiba]_.
-
-Another way to allow n messages to be signed with the
-same public key is to create n different key pairs,
-and then compute a hash tree over the public keys.
-This is only practical for relatively small n.
-
-Yet another approach is to sign one or more new public keys
-as the last message signed with the old key. This way,
-an arbitrary number of messages can be signed.
-However, verification time increases, and the signer
-still needs to keep track of which private keys
-have already been used in order not to compromise security.
-
-In section XXX, we give a description of existing
-one-time signature algorithms with their different
-tradeoffs.
-
-One-time Signature Key Boosting
-===============================
-
-This scheme is based on two primitives: 1) A `$q$`-time-signature
-algorithm which takes a random number as its private key, and 
-2) a random oracle which generates an apparently random
-bitstring from a given number.
-
-The private key for this scheme is simply a private key
-for the underlying one-time-signature primitive,
-and the public key is the corresponding one-time-signature 
-public key.
-
-To generate a signature for the message `$m$`, 
-we start by setting `$p$` to the
-private key.
-Then, we iterate over the following steps `$N$` times:
-
-1. Choose `$x \\in [1,q]$`. The exact algorithm for making this
-   choice parametrizes the algorithm; possible choices are discussed
-   below.
-
-2. Use the random oracle to generate the `$x$th` new private key
-   `$p_x$` from `$p$`.
-
-3. Sign the corresponding public key with `$p$`. This does
-   not present
-   a problem for the `$q$`-time signature algorithm, since
-   the random oracle is deterministic and
-   no more than `$q$` strings will therefore be signed
-   with any given `$p$`.
-
-4.  `$p \\leftarrow p_x$`
-
-After the last iteration, `$p$` contains the private key to be used to sign
-the actual message `$m$` using the one-time-signature primitive.
-The signature consists of this signature and the whole chain
-of signatures connecting this to the original public key.
-
-To verify a signature, the verifier only needs to traverse the
-chain of signatures
-
-As long as the algorithm for choosing `$x$` does not yield the same
-chain for two messages, the signatures XXX
-The effects of this algorithm and the parameters `$q$` and `$N$`
-are analyzed in the next section.
-
-Security of this construction
-
-
-..  If *p* is a private key, let *pub(p)* be
-    the public key corresponding to it. For a message m, let
-    *sign(p,m)* be the signature of *m* with private key *p*.
-    Let *verify(pub(p),m,s)* be true for a signature *s*
-    if *sign(p,m)=s*. Assume the above only if *sign(p,m)*
-    is not publicized for more than one *m*.
-
-    Further, let *R* be a random oracle which
-    deterministically maps a private key 
-    to a pair of other private keys.
-
-    To generate a private/public key pair in our scheme,
-    generate a random number *p* as the private key
-    and use *pub(p)* as the public key.
-
-    To sign a *b*-bit message *m*, 
-
-Variants: Choosing the Tree Branch
-==================================
-
-Choice of `$x$`
-
-Deterministic: a Full Digital Signature Algorithm Feature Set
--------------------------------------------------------------
-
-- Arbitrary (pseudo-infinite, i.e. infinite wouldn't help any more) 
-  number of keys, if for each *hash* its own private key for signing it!
-  This means that `$N \\log k \\ge h$`
-
-    - this is a nice theoretical result: it *is* possible to sign anything
-      without trapdoors - full feature set of normal (non-one-time) DSs
-
-    - feasible
-
-    - impractical; actual numbers below
-
-
-
-      - Works with `$k=10$`, `$N=16$` for SHA-1; sig length
-       is about `$16(r'+s')$`; realistically, about
-       25KB using Merkle-Winternitz with `$n=2$`.
-
-        Formally, this is:
-        Key boosting(16, Merkle hash tree(10, Merkle-Winternitz(160,160,2), 
10))
-
-       and has the octuplet??
-
-- Security not straightforward:
-  There is a large number of hashes used, and a collision
-  between any two could allow forging of signatures.
-  birthday attacks, ...
-
-- AAAGH We can't use 80-bit hashes inside the tree, and it's
-  questionable whether we can even use 160-bit! 
-  Reason: if you sign a lot of docs, chances are 
-  you get a common birthday: two instances
-  of the same key used at two different branches.
-
-  Especially since we use N primitive signatures for each sig.
-
-  This needs to be reasoned out carefully.
-
-Probabilistic limited
----------------------
-
-Shorter signatures
-
-- If less, cannot use information from hash directly, otherwise can attack
-  by giving close relatives
-
-  - except! Algorithm for choosing `$x$` need not be public. If we hash
-    a different private key plus the content hash or content of the 
information,
-    we *can* use it here; random oracle 
-
-    - birthday paradox; if collision, someone can forge a signature
-      (relevant if a large number of chosen message attacks)
-
-  - can use random number; if we sign only 2**20 messages total,
-    choosing randomly from 2**60 keys should be enough, since
-    we expect collisions only at about 2**30 messages signed
-
-    - birthday paradox again: must not allow the attacker to have
-      2**30 messages being signed
-
-- however, collisions *only* invalidate one leaf of the key tree, so 
-  it *is* possible to 
-  revoke only that leaf, not the whole key.
-
-Ordered
--------
-
-- Keep count of number of signatures made
-
-- use bits of count for choosing
-
-- this is basically a k-time signature made feasible
-  for large k
-
-- mustn't lose count! 
-
-- can't copy key or restore from backup!
-
-- any scheme mapping the *action* of signing uniquely to a number between 0 
and `$q$`
-  will work.
-
-Analysis: Characterizing one-time signature schemes
-===================================================
-
-To compare possible one-time signature schemes for use
-with our algorithm, we
-
-We shall characterize the underlying one-time signature scheme by
-a octuplet `$(q, b, s, r, h, c_0, c_s, c_v)$`, where
-`$q$` is the number of messages a single private key can be used to sign,
-`$b$` is the number of bits in a single signed message.
-`$s$` is the number of bits in a signature,
-`$r$` is the number of bits in a public key,
-`$h$` is the number of bits a in the hash function used,
-`$c_0$` is the number of invocations of the hash function off-line at key 
generation,
-`$c_s$` is the number of invocations of the hash function when signing,
-and
-`$c_v$` is the number of invocations of the hash function when verifying.
-
-..  raw:: latex
-
-    \begin{table*}\def\sw{2.5cm}
-    \raggedright
-    \begin{tabular}{lccccccccc}
-       \parbox{\sw}{Scheme (params) }
-           & $q$ & $b$ & $s$ &   $r$  & $h$ & $c_0$ & $c_s$ & $c_v$ \\
-       \hline
-       \multicolumn{4}{l}{\hskip 2cm Primitives} \\
-       \hline
-       \parbox{\sw}{Lamport\cite{XXX}\\$(h,b)$} 
-           & $1$ & $b$ & $bh$ & $2bh$ & $h$ & $2b$ & $0$ &  $b$ \\
-       \parbox{\sw}{Merkle I $(h,b)$}
-           & $1$ & $b$ & $(b+\lceil \log_2 b \rceil)h$ & $h$ & $h$ &
-               $b+\lceil \log_2 b \rceil + 1$ & $0$ &
-               $\le b$ \\
-       \parbox{\sw}{Merkle-Winternitz\cite{XXX} $(h,b,n)$ }
-           & $1$ & $b$ & $(\frac{b}{n}+1)h$ & $h$ & $h$ &
-               $2\frac{b}{n}(2^n-1)+1$ & $\frac{b}{n}(2^n-1)$ &
-               $\frac{b}{n}(2^n-1)+1$ \\
-       \parbox{\sw}{BiBa $(h,b,q,n,t,k)$}
-           & $q$ & $b$ & $kh$ & $th$ & $h$ & $t$ & $1+t+k$ & $1+t+k$ \\
-       \parbox{\sw}{BiBa-Merkle $(h,b,q,n,t,k)$}
-           & $q$ &  $b$ &  $k\lceil \log_2 t \rceil h$ 
-                               &  $h$ &  $h$ & $2t$ &  $1+t+k $
-                                                &  $1+t+k+ k\lceil \log_2 t 
\rceil$ \\
-       \parbox{\sw}{Reyzin $(h,b,t,k)$ }
-           & $1$ & $b$ & $kh$ & $th$ & $h$ & $t$ & $1$ & $1+k$ \\
-       \parbox{\sw}{Reyzin-Merkle$(h,b,t,k)$ }
-           & $1$ & $b$ & $k\lceil \log_2 t \rceil h$ 
-                              & $h$ & $h$ & $t$ & $1$ & $1+k+k \lceil \log_2 t 
\rceil$ \\
-       \parbox{\sw}{Bleichenbacher-Maurer\cite{XXX(ASIACRYPT)}
-               (h, n) 
-                        } 
-           & $1$ & $\lfloor\eta n\rfloor$
-                       & $3(n+1)h $
-                             & $h$ 
-                                   & $h$ 
-                                         & $9n+2$ & 0 & $9n+2 $
-            \\
-       \hline
-       \multicolumn{4}{l}{\hskip 2cm Derived schemes} \\
-       \hline
-       \parbox{\sw}{Merkle hash tree \cite{XXX} 
-       % XXX check this again
-       ($n, S'$) }
-           & ${2^n}q'$ 
-               & $b$ & $s'+r'+(n+1)h$ 
-                           & $h$ & $h$ & 
-                                       ${2^n}c_0' + 2(2^n)-1$ & 
-                                                $c_s'$ &
-                                                       $c_v'+n+1$ \\
-       \parbox{\sw}{Key boosting $(N, S')$ }
-           & ${q'}^N$ & $b$ & $N(r'+s')$ & $r'$ & $h$ &
-               $c_0'$ & $N(c_0'+c_s')$ & $Nc_v$ \\
-       \hline
-    \end{tabular}
-    \caption{
-       Characterizations of existing one-time signature schemes.
-       The symbols are explained in the text. $n$ is a freely chosen
-       positive integer. 
-       The Biba and Reyzin schemes (also the Merkle variants) are
-       probabilistic and the parameters must be chosen to obtain
-       sufficient security.
-       Even in the non-probabilistic alternative
-       of the Reyzin scheme, $t$ and $k$
-       must be chosen so that ${t \choose k} \ge 2^b$; in that alternative, 
-       the running time of signing and verifying is more complicated and
-       not taken into account in the table.
-       In Biba, the invocations of the random oracle that throws the balls
-       into bins are counted as single hash function invocations.
-       For Bleichenbacher-Maurer, XXX 
-       `$\eta=\log 51 / \log 2$`.
-        The derived schemes use
-       as their basis another one-time signature scheme
-       $S'$ with the parameter octuplet
-       $(q',b,s',r',h,c_0',c_s',c_v')$.
-    }
-    \end{table*}
-
-Table XXX shows the tradeoffs possible in various one-time signature 
algorithms.
-The formulas for key boosting follow trivially from
-the description of the algorithm.
-
-In order to work, key boosting requires the
-hash tree as a basis to obtain an basis algorithm
-with `$q' \\ne 1$`.
-
-The values for Bleichenbacher and Maurer's algorithm
-
-
-- given `$N$` and `$q$`, there are `$q^N$` 
-  possible private keys for signing messages.
-
-
-- the first levels of signatures may be given in the public key,
-  giving a tradeoff between public key size and signature size.
-
-Lamport
--------
-
-- private key: `$2b$` random numbers
-
-- public key: hashes of private key - calculate `$2b$` hashes
-
-- sign: reveal one of each pair of RNs in private key corresponding to signing 
0 or 1
-  Signature contains `$b$` of the random numbers
-
-- verify: check that the revealed RNs hashes to right hash in public key - 
-  calculate `$b$` hashes
-
-Octuplet: `$(1, b, bh, 2bh, h, 2b, 0, b)$`
-
-
-Merkle (?)
-----------
-
-
-
-This scheme is an improvement over Lamport, needing
-only `$k=b+\\lceil \\log{2} b \\rceil$` hashes.
-
-Let `$m_i$` be the `$i$`-th bit of the message.
-
-- private key: A list of `$k$` random numbers `$R_i$`.
-
-- public key: Compute a list of `$k$` hashes `$P_i=H(R_i)$`;
-  the hash of this list is the public key.
-
-- sign: Reveal the `$R_i$` for `$i \\le b$` if the
-  `$m_i=0$`. Compute the checksum `$c=\\sum{m_i}$`,
-  and interpret as a bitstring. Reveal `$R_{b+i}$`
-  if the `$i$`-th bit of the bitstring is zero.
-
-  At most `$b$` numbers are revealed (if all bits
-  in the message are zero).
-
-  The signature consists of the revealed numbers,
-  plus the hashes of the numbers that were not revealed.
-
-- verify:
-
-Octuplet: `$(1, b, h(b+\\lceil \\log{2} b \\rceil), h, h,
-b+\\lceil \\log{2} b \\rceil + 1, 0, \\le b$`
-
-
-Merkle-Winternitz
------------------
-
-This scheme relies on recursive application of the hash function.
-Let `$n$` be a positive integer and `$k=\\frac{b}{n}$`.
-Let `$H$` donate the hash function, with `$H^2(x)=H(H(x))$` etc.
-
-- private key: A list of random numbers `$(R_0,...,R_k)$`.
-
-- public key: Compute `$P_0=H^{k(2^n-1)}(R_0)$`, and
-  `$P_i=H^{2^n-1}(R_i)$` for `$i>0$`. The hash of
-  `$(P_0,...,P_k)$` is the public key.
-
-  Needs `$2k(2^n-1) + 1$` hash function invocations.
-
-- signature: Split the `$b$`-bit message into `$k$` 
-  parts of `$n$` bits each. Interpreted each part
-  as an integer `$k_i$` for `$0 < i \\le k$`.
-  Compute `$S_i=H^{k_i}(R_i)$` for `$i>0$`
-  and `$S_0=H^{(2^n-1)k-\\sum{k_i}}(R_0)$`. The tuple
-  `$(S_0,...,S_k)$` is the signature.
-
-  Signing requires `$k(2^n-1)$` invocations
-  of the hash function.
-
-- verification: Compute `$k_i$` as above.
-  Compute `$V_0=H^{\\sum{k_i}}(S_0)$`
-  and `$V_i=H^{2^n-1-k_i}(S_i)$` for `$i>0$`.
-  Check that the hash of `$(V_0,...,V_i)$`
-  equals the public key.
-
-  Verification requires `$k(2^n-1) + 1$` invocations
-  of the hash function.
-
-Octuplet: `$(1, b, kh + h, h, h,
-2k(2^n-1)+1, k(2^n-1)+1, k(2^n-1)+1)$`
-
-
-BiBa
-----
-
-The signer generates `$t$` random numbers (balls) and publishes
-their hashes as the public key. A hash function maps each ball
-to one of `$n$` *bins*, depending on the signed message 
-and a counter, initially zero.
-If `$k$` balls fall into the same bin, they are published
-as the signature. If no bin contains at least `$k$` balls,
-the counter is increased and the procedure is repeated
-until a '`$k$`-time collision' is found.
-
-- private key: the `$t$` random numbers
-
-- public key: the hashes of the random numbers
-
-- sign: apply the hash function to all balls
-  until a `$k$`-time collision is found
-
-- verify: verify that the hash function maps the published balls
-  into the same bin; verify that the balls match the public key
-  (i.e., that the public key contains their hashes).
-
-Octuplet: `$(q, b, kh, th, h, t, 1+C(t)+k, 1+C(t)+k)$` XXX check
-
-Probability for successful forgery at one attempt
-after `$r$` signatures:
-`$ {rk \\over k} (n-1)^{(r-1)k} / n^{rk-1} $`
-
-Because only a small number of the hashes in the public key need to be
-revealed and checked when signing, a Merkle hash tree may be used
-for the public key as described in the appendix of [XXX].
-However, in the usual course of things this is impractical because
-of the increased signature size. However, here the situation is different
-since both public key size and signature size
-of the underlying algorithm add to the 
-
-Never more than `$k \\lceil \\log_2 t \\rceil$` hashes need to be provided
-Worst-case estimate octuplet:
-`$(q, b, k\\lceil \\log_2 t \\rceil h, h, h, 2t, 1+C(t)+k, 1+C(t)+k+ k\\lceil 
\\log_2 t \\rceil)$` XXX check
-
-MERKLE HASH TREE VARIANT!!! REDUCE PUBLIC KEY + SIG SIZE!!!
-
-       In BiBa, $t$ is the number of balls, $n$ the number of bins,
-       and $w$ the number of balls needed in a single bin
-       in order to form a signature.
-
-Powerball
----------
-
-Like BiBa, except that instead of looking for a `$k$`-way collision,
-the public key is used to generate patterns in which each bin must
-be filled.
-
-Not included in table: detailed analysis of probability of forgery
-not found in literature, and is beyond the scope of this article..
-
-Reyzin
-------
-
-We discuss only the second algorithm, based on subset-intractable
-functions.
-
-To sign `$b$` bits, choose `$t$` and `$k$` such that
-`$ {t \\choose k} \\ge b $`
-
-Parameters `$t$` and `$k$`.
-
-- private key: `$t$` random numbers
-
-- public key: hashes of the random numbers. Calculate `$t$` hashes
-
-- sign: Hash the message, split hash to `$k$` strings of `$\\log t$` bits.
-  use these as indices to say which numbers to reveal in the signature.
-  Calculate one hash.
-
-- verify: same deterministic part, check that revealed numbers hash right.
-
-Probability for successful forgery after `$r$` signatures:
-`$(rk/t)^k$` 
-
-?
-
-- serious vulnerabilities with adaptive chosen-message multiple signatures,
-- however, not a problem in our current context, as different key will be used
-  for each signature
-
-Octuplet: `$(1, b, kh, th, h, t, 1, 1+k)$` 
-
-Additionally, a Merkle hash tree can be applied as in BiBa:
-Octuplet: `$(1, b, k\\lceil \\log_2 t \\rceil h, h, h, 2t, 1, 1+k+k\\lceil 
\\log_2 t \\rceil)$` 
-XXX check
-
-Bleichenbacher-Maurer
----------------------
-
-ASIACRPTO construction
-
-- Construction for `$H_n$`: a binary tree,
-  at each node 2 hashes combined into one
-
-- private key: `$3(n+1)$` hash values of tree leaves.
-  Calculate `$9n+2$` hashes. This can sign
-  `$\\lfloor {\\log 51 \\over \\log 2} n \\rfloor$` bits.
-  (XXX Some were not allowable because not minimal???)
-
-- public key: one hash, the one calculated for the root of the tree
-
-- sign: message determines which nodes of the tree to reveal; 
-  Signature contains `$3(n+1)$` hashes.
-
-- verify: check that right nodes revealed, and that tree computes right
-  public key - calculate some less than `$9n+2$` hashes
-
-Octuplet: `$(1, \\lfloor\\eta n\\rfloor,
-3(n+1)h, h, h, 9n+2, 0, 9n+2)$` 
-
-
-Merkle hash trees
------------------
-
-Assume an underlying one-time signature scheme `$S'$`.
-Generate `$2^n$` public keys through `$S'$`, 
-compute a hash tree over them, publish the root 
-of the tree as the actual public key.
-
-Assume underlying algorithm using same hash.
-
-Signature using new public key will not need to contain 
-all the public keys, just path through the tree.
-
-- private key: `$2^n$` private keys of the underlying algorithm.
-
-- public key: Calculate the `$2^n$` public keys; hash each
-  public key (if it is longer than a single hash); compute
-  the hash tree. Calculating the public key takes
-  `$2^n c_0$` and calculating the hash tree takes
-  `$2^{n+1}-1$` hash function invocations.
-
-  The branches in the hash tree are stored for use
-  when signing.
-
-- sign using one key: Sign with that private key, provide the
-  corresponding public key, and provide the chain of hashes
-  from the hash tree's root to the public key.
-  Only hash invocations in the signing using the underlying algorithm.
-
-- verify: verify signature with new public key, verify hash chain.
-
-Octuplet: `$({2^n}q', b, s'+r'+hn+h, h, h, 
-{2^n}c_0' + 2(2^n)-1, c_s', c_v'+n+1)$`
-
-Efficiency of key boosting
-==========================
-
-- general analysis as appears in table
-
-- given different choices for the underlying scheme,
-  and for choosing x
-
-- maybe recommendations
-
-Octuplet: `${q'}^N, b, N(r'+s'), r', h,
-c_0', N(c_0'+c_s'), Nc_v)$`
-
-
-Tradeoffs in deterministic key boosting
----------------------------------------
-
-Supporting multiple signatures is possible e.g. in BiBa,
-but inefficient. Merkle hash trees better
-
-we want the full deterministic
-algorithm, 
-that, which requires `$ nN = 160 $`
-
-2, 80
-3, 54
-4, 40
-5, 32
-6, 27
-7, 23
-8, 20
-9, 18
-10, 16
-11, 15
-12, 14
-13, 13
-...
-
-
-
-
-- we demand security level `$2^{-160}$` for our underlying schemes
-
-  - biba:
-
-  - Reyzin subset-resilient. The security requirement, 
-    for a single signature signing 160 bits, this means that 
-    `$\\log t \ge {160-\log k \over k}$`.
-    The choice with smallest `$t+k$` and (with less priority)
-    `$t$` is XXX SMALLEST K?
-    `$t=308$`, `$k=91$`
-    `$t=316$`, `$k=83$`
-
-  - Reyzin pure. 
-    the Reyzin theoretical construction may be used,
-    where the time spent is somewhat more but security depends
-    only on hashes
-    Here, we only need the ability to sign 160 bits,
-    which we get at the cheapest (where sum of bits
-    in signature plus public key is smallest, and
-    with smallest `$t$` at 
-    `$t=168$`, `$k=69$`
-    `$t=175$`, `$k=62$`
-
-  - Bleichenbacher-Maurer. 
-    To sign 160 bits, we need `$n=29$`.
-    Signatures are 90 hashes
-
-
-Conclusion
-==========
-
-- key idea: using the deterministic bit string for each privkey
-
-In long-term digital publishing, the time limits on normal digital signatures
-are 
-
-- we expect our methods to be improved on considerably; we have shown it is 
*feasible*,
-  now someone needs to show it's *practical*
-
-- hashes *do* get broken, REF
-
-foo
-
-.. bibliography:: gzigzag
Index: manuscripts/Sigs/poss.py
diff -u manuscripts/Sigs/poss.py:1.10 manuscripts/Sigs/poss.py:1.11
--- manuscripts/Sigs/poss.py:1.10       Mon May 19 09:18:32 2003
+++ manuscripts/Sigs/poss.py    Mon May 19 09:35:54 2003
@@ -45,8 +45,8 @@
                S[4],
                S[4],
                2L**n * S[5] + 2L**(n+1) - 1,
-               S[6] + n,
-               S[7] + n)
+               S[6],
+               S[7] + n + 1)
 
 def key_boosting(N, S):
     return (S[0] ** N,
@@ -116,16 +116,23 @@
 
     if 1:
 
-       def pzip(names, arrs):
+       def pzip(names, arrs, zeros):
            res = []
            for i in range(0, len(arrs[0])):
-               res.append(" + ".join([
-                       "%s %s" % (arrs[name][i], names[name])
+               s = [
+                       "%s %s" % (arrs[name][i]-zeros[i], names[name])
                    for name in range(0, len(names))
-                       if arrs[name][i] != 0]))
+                       if arrs[name][i]-zeros[i] != 0]
+               if(zeros[i] != 0):
+                   s.append(" %s" % zeros[i])
+               s = " + ".join(s)
+               res.append(s)
            return res
        
        for N,n in tks:
+           z = key_boosting(N,
+            merkle_hashtree(n,
+             (0, 0, 0, 0, 0, 0, 0, 0)))
            ss = key_boosting(N,
             merkle_hashtree(n,
              (0, 0, 1, 0, 0, 0, 0, 0)))
@@ -145,8 +152,8 @@
             merkle_hashtree(n,
              (0, 0, 0, 0, 0, 0, 0, 1)))
            print "\n\n",N,n
-           print "S,R:", pzip(("s'", "r'", "h'"), (ss, sr, sh)) [2:4]
-           print "C0,Cs,Cv:", pzip(("C0'", "Cs'", "Cv'"), (sc0, scs, scv)) [5:]
+           print "S,R:", pzip(("s'", "r'", "h'"), (ss, sr, sh), z) [2:4]
+           print "C0,Cs,Cv:", pzip(("C0'", "Cs'", "Cv'"), (sc0, scs, scv), z) 
[5:]
 
 
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]