Expand description
SD-APKE: SecureDrop authenticated public-key encryption.
Spec pseudocode:
def KGen():
(sk1, pk1) = AKEM.KGen()
(sk2, pk2) = KEM_PQ.KGen()
sk = (sk1, sk2)
pk = (pk1, pk2)
return (sk, pk)
def AuthEnc(sk=(skS1, skS2), pk=(pkR1, pkR2), m, ad, info):
(c2, K2) = KEM_PQ.Encap(pkR=pkR2)
(c1, cp) = pskAEnc(skS=skS1, pkR=pkR1, psk=K2, m=m, ad=ad, info=c2+info)
return ((c1, cp), c2)
def AuthDec(sk=(skR1, skR2), pk=(pkS1, pkS2), c1, cp, c2, ad, info):
K2 = KEM_PQ.Decap(skR=skR2, enc=c2)
m = pskADec(pkS=pkS1, skR=skR1, psk=K2, c1=c1, cp=cp, ad=ad, info=c2+info)
return mStructs§
- Message
Ciphertext - SD-APKE ciphertext
((c1, cp), c2). - Message
KeyPair - A
(MessagePrivateKey, MessagePublicKey)SD-APKE keypair. - Message
Private Key - The SD-APKE private key tuple
sk^APKE = (sk1, sk2). - Message
Public Key - The SD-APKE public key tuple
pk^APKE = (pk1, pk2).