MATH 470 Lecture 20

From Notes
Jump to navigation Jump to search

« previous | Tuesday, April 2, 2013 | next »


Provably Good Hash Function

Why do we care about hash functions?

  • Vital for signatures (sign a message digest instead of the whole message)
  • message padding
  • Error-checking

Chaum, Van Hiejst, Pfitzman, 1992:

Following construction is strongly-collision-resistant, assuming discrete log is hard:

  1. Find large prime p with q=p12 also prime.
    • in practice, pick q and then check if p=2q+1 is prime
    • easy via Prime Number Theorem and assumption of randomness of primes: for 100-digit number, there are approx. 10100log10100 primes in {1,,10100}.
  2. Pick 2 (distinct) generators α and β for (/p)*
  3. H:/q2(/p)* is defined by H(x)=αx0βx1(modp), where x=(x1,x0)q are the base-q numbers of x
    • Converting from 2log10q digits to log10p=log10q+C digits.
good
"provably good"
bad
Too inefficient for practical applications
Only halves the number of digits
ugly
In practice, a simpler (Ad-Hoc) construction is used: SHA-1


Proof

Proposition. H is (2) pre-image resistant and (3) strongly-collision-resistant.

Proof. Let's prove (3) first.

Assumptions:

  • discrete logarithm is not computable in polynomial time.
  • we can find x,x/q2 with H(x)=H(x) in polynomial time.

If we find such x and x, then we have

x=x0+x1qx=x0+x1q

and

αx0βx1αx0βx1(modp)

Now since α is a generator for (/p)*, β=αa for some a we don't know.

In fact, a is the discrete log of β to the base α, mod p.

Therefore

αx0αax1=αx0αax1(modp)αa(x1x1)=αx0x0(modp)a(x1x1)=x0x0(modp1)

This congruence has a solution for a iff GCD(x1x1,p1)(x0x0).

So what can that GCD be?

x1,x1{0,,q1} by construction, so (q1)x1x1q1

Also, p1=2q, so the GCD is either 1 or 2, q, or 2q. q and 2q are too big, so only 1 and 2 remain.

Solution can now be found in poly time: Just try solutions!

αa1=?βαa2=?β

We've just found the discrete log!

Now if x1=x1 then x0=x0 and x=x. CONTRADICTION!

Therefore, if H is not strongly-collision-resistant, then the discrete logarithm must be easy!

(2) is easy to prove, but we'll get to that later.

Q.E.D.


Pseudo-Random Generators

"Something even more fundamental"

Polynomial Congruential

One of Simplest PRGs: Linear congruential:

x0=seed{0,m1}xn+1=axn+b(modm)a,b(/m)

This "smells" random, but is terribly insecure: If you can find 3 consecutive xis, then you can easily find a and b:

xi=axi1+bxi+1=axi+b

Linear system is solvable given xi1≢xi(modm)

In fact, any polynomial congruential generators are insecure due to predictability.


Blum-Blum-Shub Random Bit Generator

More Sophisticated:

  1. Pick large primes p and q with pq3(modp), let n=pq, and pick a random [1] x(/n)* Let seed be x0=x2(modn)
  2. </math>x_{n+1} = x_n^2 \pmod{n}</math> Return bn be the last bit of xn.

Theorem

Assume computing Jacobi symbol (un) is not doable in polynomial time. Then the BBS Bit Generator is indistinguishable from a truly random bit stream, by any polynomial time algorithm.

Note: In modern analysis, how much time do you wish to invest to prove randomness?

Random numbers have certain properties according to probability


Elliptic Curves

Elliptic Curve Cryptography (ECC) is already being used in smart cards in Europe as an extra layer of security.

Using RSA, high security implies huge keys and slow computation

ECC allows "high security" using 300-bit keys (maybe equiv 4000-bit RSA key)

Idea: work with a more general "group" than (/p)* or (/pq)*. Instead, ECC uses points on a curve over a finite field.


Footnotes

  1. It's odd that we need to pick a random number for a random number generator...