SLIDE 7 NewHope
Key Generation Output: public key pk = (ˆ b′, ρ) Output: secret key sk = ˆ s
1: seed
$
← {0, · · · , 255}32
2: ρ, σ ← SHAKE256(64, seed) 3: ˆ
a ← GenA(ρ)
4: s ← Sample(σ, 0) 5: e ← Sample(σ, 1) 6: ˆ
b ← ˆ a ◦ NTT (s) + NTT (e)
7: return pk = (ˆ
b, ρ), sk = ˆ s Decryption Input: ciphertext c = (ˆ u, h) Input: secret key sk = ˆ s Output: message µ ∈ {0, · · · , 255}32
1: v′ ← Decompress(h) 2: return µ = Decode(v′ − NTT−1(ˆ
u ◦ ˆ s)) Encryption Input: public key pk = (ˆ b, ρ) Input: message µ encoded in Rq Input: seed coin ∈ {0, · · · , 255}32 Output: ciphertext (ˆ u′, h)
1: ˆ
a ← GenA(ρ)
2: s′ ← Sample(coin, 0) 3: e′ ← Sample(coin, 1) 4: e′′ ← Sample(coin, 2) 5: ˆ
t ← NTT (s′)
6: ˆ
u ← ˆ a ◦ ˆ t + NTT (e′)
7: v′ ← NTT−1(ˆ
b ◦ ˆ t) + e′′ + µ
8: return c = (ˆ
u, Compress(v′))
NewHope: Algorithm Specifications and Supporting Documentation Yusuf Alper Bilgin Cortex-M4 optimizations for {R,M}LWE schemes September, 2020 5 / 18