Authentication

Using assymetric key cryptography

One simple way of authentication is to encrypt and return a challenge message using one’s secret key.

Using a password

This is very common - eg: it is used over to log into terminals.

To beat snooping, passwords are transmitted over a secure channel (eg: ssh vs rsh).

One-time passwords

Passwords may be spoofed - even over a secure channel by an adversary who jumps into a session and replays the password message to, for example change the password. To guard against this, a one-time password can be used. These are often based on a one way function f with an initial point p, which can be used to generate a sequence fi(p). To do this, people are often provided with a special physical device.

Signing public messages, and their authentication

setup(l): SK, PK, s = sign(m, SK), verify(m, s, PK). Algs use hash fn: H.

Not all PK cryptosystems can be converted to signature schemes: security proof can fail.

Existantial unforgeability under chosen message attack

Challenger (A) vs attacker (B) game. A to B: PK. B gets many msgs {mi} signed by A. Finally, B forges a m{mi}.

Main challenges in proofs

A, B, C game. Generation of signatures by B; Use of C’s forgery to break A.

Weak signature scheme

B tells A list {mi} he wants signed before B sees PK.

One-time signature scheme

Attacker allowed to make only one signing query. Maybe after seeing PK.

Unforgability using weak and one-time signatures W, O

setup(l): Run setupo(l) poly(l) number of times. Get vector ((OSKi,OVKi)). Run setupw(l) and get VKw,SKw. Sign all {OVKi} with SKw to get the vector (SOVKi). Set PK=PKw.

sign(m): Pick (OSKi,OVKi,SOVKi) triple \ not used eariler. Get s1=signo(m,OSKi). Set s=s1,SOVKi,OVKi. verify(m, s): verifyw(SOVKi,OVKi,VKw)1?= and verifyo(s1,m,OVKi)1?=.

Schnorr signature

Setup: Take G of prime order p; Pick g, a; PK: g, ga. SK: a. H:{0,1}×GZp. Sign(m, SK): Pick random gk; e=H(m,gk); t = k + ae mod p; s=(gk,t). Verify(m, s, PK): Know e,g,ga,gk; chk gtg?=k(ga)e.

Unforgeability under random oracle assumption

A: DL challenger; B: DL attacker; C: Schnorr attacker. B gets g, ga from A, passes it on to C as PK. When C asks for sign(m, SK), B picks random e; want t = k + ae mod p, pick k = r - ae; fill up random oracle table H(m,gk)=e. B knows random bits used by C. When C forges, it uses some query H(m,gk); random oracle gives e1, set up by B for gk1: so B, given the forgery, knows t1=k1+ae1. Then B rewinds C to the same point and instead supplies e2, finds t2=k1+ae2, finds a.

RSA signature

Use RSA SK to sign: H(m)dmodn = s. Use RSA PK to verify: semodnH?=(m). e chosen to be small: like 3: faster verification. Can’t have d too small: attack can try all small numbers.

Unforgeability under random oracle assumption

Not based on DL. A: RSA assumption challenger; B: RSA attacker; C: RSA forger. A gives B: N,e,he. Game mostly same as Schnorr. When B must sign m, it picks y, sets H(m)=ye, returns y. When C forges using query H(m), it is given he.

Signature from GHR

Setup: PK: N = pq, u, w; SK: p, q. Sign(m): pick prime e<ϕ(N); s=(umw)e1,e. Verify: se(?=umw).

Unforgeability under weak signauture scheme

A: Flexible RSA challenger; B: FRSA attacker; C: GHR forger. B gives A set {mi}; A replies with {si} with {ei}. A gives B PK depending on 2 cases. Case 1: Guess that forgery on mk; pick g=hmjmk, set w=gieihmkikei,u=hikei; answer sig query for mj with hΔmik,jeigijei; get forgery s=giei/e; use KS with x=h,a=Δmikei,y=s,b=ek \chk. Case 2: Pick a,w=hei,u=haei \chk. \tbc

KS Lemma: If xa=ybmodp;gcd(a,b)=1, can find z: zb=x \why.

Signature from BF IBE

(BLS) BF IBE uses full domain fn H. SK: y. PK: g,gy. Encrypt: Keygen(m)=H(m)y=s. Verify: e(s,g)e?=(H(m),gy).

Unforgeability using random oracle

A: CDH challenger, B: BLS challenger, C: BLS attacker. A to B: g,ga,gb. B: SK = b (not known to b), PK:g,gb. B guesses that C forges kth query to random oracle, sets H(mk)=ga; for other i, picks random n, sets H(mi)=gn. B replies to sign requests by picking x, setting H(m)=gx, gxa. B uses forgery to break CDH.

Signature from any IBE

Setup(l): Get PP, MSK. Set PK = PP; SK = MSK. Sign(m): s = Keygen(H(m), MSK). Verify(m, s): Pick some other msg n. Get c = Encrypt(n, PP, H(m)), then get n’ = decrypt(c, s), do nn?=.

Aggregate signatures

Eg: petition signing, BGP. Verify n msgs with n PK’s: m1..mnsagg. Algorithms: Setup: (PK, SK); Sign(SKi,m)=σi,m; aggregate(s1..k,σk+1)=sk+1: \ ordering should not matter; verify({PKi},m1,..mn,s1..n).

Unforgability of aggregate signatures

A: Agg sign challenger; B: attacker. A to B: PK’. B gets many messages signed using SK’. B forges; forgery: \ {mi,m},{PKi,PK},s: B not told sgn(m) earlier.

Aggregate signature using BLS

sagg=H(mi)yi would fail: B can tell A: sagg=H(m)y1H(m)y1=1. Instead use: sagg=H(mi,PK)yi.

Applications

Proof of storage.

Certificate chains for PK’s

PK often accompanied by certificate: something signed with the SK of certificate authority (CA). This signature often accompanied by another certified PK. This continues recursively until the trusted root CA’s signature.

Proof of storage

Owner stores something on storer; who proves storage using a protocol. Owner calls Store(D) Verification Key VK, Storage File SF; owner keeps VK, gives storer SF. Audit interactions: prove(SF) verify(VK). Correctness condition: verify(VK) convinced wnnp iff extractor: E(p) = D.

Performance measures: Audit speed, bandwidth between owner and storer during audit, verifier storage, prover storage.

Store(D): SF = D; VK={(hi=H(Ki,D),Ki)}. Disadvantage: Verification works n times. Usually use random oracles for extraction.

Based on Erasure code

Code expands m blocks (D) to n blocks; if ye have n/2 blocks, can recover D. SF is the n blocks, with signatures {sgn(blocki,i)}; VK = signature keys. Verify() wants to check that storer has n/2 blocks whp: Verify asks for k random blocks; storer gives these blocks; verifier checks signature in response; if storer has <n/2 blocks, Pr(Audit succeeds) 2k.