OWF →(trivial modification)→ OWP + hc → G(x)=(hc(x),f(x)): 1-bit PRG → Blum–Micali: n-bit PRG → stream cipher E(k,m)=G(k)⊕m (concrete believed instance: f(x)=g^x\bmod p, hc(x)=[[x<p/2]])X ⟹ OWF ⟹ PRG ⟹ PRF ⟹ PRP/MAC/AE/CCA/signaturesMap[c_i]←m_i for its encryptions and, for a decryption query c_j, sets Map[c_j]←D(k,c_j) if unknown, answers Map[c_j]Map and returns \bot for anything unseen (it never actually decrypts)Map, and submits the \omega-th ciphertext to its CI challenger; given Z, \omega is the index of the first forgery with probability \frac1{Q_d} ⟹ \mathsf{CIadv}[\mathcal B_{CI}]\ge\frac{\Pr[Z]}{Q_d}Map and echoes \mathcal A: |\Pr[W_1]-\tfrac12|=\mathsf{CPAadv}^*[\mathcal B_{CPA},\Pi,Q_e]; triangle inequality ∎DH / EC-isogenies / LWE ─[RO or DDH+extractor]→ CPA-secure KEM OWTF (OW-CPA) ─[RO]→ CPA-secure KEM OWTP ─ Blum–Micali chain, NO RO → CPA-secure KEM OWTF ─ FO transform → OW-VA OWTF ─[RO]→ CCA-secure KEM OWTP ─ (trivially OW-VA) ─[RO]→ CCA-secure KEM DH ─ [GDH, RO] → CCA-secure KEM CPA KEM + sem.-secure cipher ─ hybrid → CPA-secure PKE CCA KEM + CCA symmetric cipher ─ hybrid → CCA-secure PKE OWTP + RO ─ Full Domain Hash → SUF-CMA signatures OWF ─ Lamport → containment-free → hash → tree → (S)UF-CMA signatures
DH / EC-isogenies / LWE ─[RO or DDH+extractor]→ CPA-secure KEM
OWTF (OW-CPA) ─[RO]→ CPA-secure KEM
OWTP ─ Blum–Micali chain, NO RO → CPA-secure KEM
OWTF ─ FO transform → OW-VA OWTF ─[RO]→ CCA-secure KEM
OWTP ─ (trivially OW-VA) ─[RO]→ CCA-secure KEM
DH ─ [GDH, RO] → CCA-secure KEM
CPA KEM + sem.-secure cipher ─ hybrid → CPA-secure PKE
CCA KEM + CCA symmetric cipher ─ hybrid → CCA-secure PKE
OWTP + RO ─ Full Domain Hash → SUF-CMA signatures
OWF ─ Lamport → containment-free → hash → tree → (S)UF-CMA signaturesSim(): x←R X; y←F(pk,x); I[y]←x; return y; every H[m] is produced by Sim() and signing returns I[H[m_i]]; because F(pk,\cdot) is a permutation, y is uniform, so \mathcal A's view is unchanged: \Pr[W_0]=\Pr[W_1]Sim(); signing queries answered from I[\cdot]: fails only if \mathcal A asks a signature for the \omega-planted message, i.e. only if \omega was not the forgery message; with probability \frac1{Q_{ro}+1} the simulation is perfect and \hat\sigma is a preimage of \hat y ⟹ \mathsf{OWTFadv}[\mathcal B]\ge\frac{\Pr[W_1]}{Q_{ro}+1} ∎Setup(), one block per oracle, Challenge()/Forgery(); later games as diffs); (2) one bullet per gap: a wrapper (who, what it outsources, what it outputs, query count) or a difference-lemma argument (Z, why the games coincide unless Z, \Pr[Z]); (3) bound the last game directly, telescope with the triangle inequality, end with "by our assumptions this value is negligible"
Sim() of FDH); or plant the challenge at one guessed query (you cannot answer a signing query for that message (fine exactly when it is the forgery message))Sim() (FDH: valid because F is a permutation, so y stays uniform); replace "lazy random function" by "fresh randoms, reusing on collision" (Luby–Rackoff G_5, PRF∘UHF G_1); index the RO by b only instead of the full triple (GDH proof)OWF ← (implied by everything below) ← OWP+hc [G(x)=(hc(x),f(x)): 1-bit; Blum–Micali/parallel: n-bit] → PRG → PRF [G(k)=F(k,0)‖F(k,1)‖…] → {stream cipher (sem.-secure, |K|<|M|), IND-CPA ciphers (rCTR/OFB), (S)UF-CMA MACs} → Encrypt-then-MAC → AE → IND-CCA ciphers, with back-edges PRP ⇄ PRF (Luby–Rackoff; switching lemma cost Q^2/2|\mathcal X|; P(k_1,m)\oplus P(k_2,m)), PRP → PRG: P(s,[0])‖P(s,[1])‖P(s,[2]), strong PRP → IND-CCA cipher: P(k,(m,r)), tweakable E(k,s,m)=P(F(k,s),m); and OWF → PRG ⟹ P≠NPOWF → PRG → PRF → {MAC, IND-CPA} → AE → IND-CCA
Setup(), oracles, challenge/forgery; later games as diffs