BellerJacobi Algamal : asym_algo B, M, CA : principal K : key Nb : number certM, certB : number keypair^Algamal PK, SK (key) alias certM = { CA, M, PK(M) }_SK(CA)^Algamal alias certB = { CA, B, PK(B) }_SK(CA)^Algamal B knows B, M, PK(B), SK(B), certB, CA, PK(CA), Algamal M knows M, PK(M), SK(M), certM, CA, PK(CA), Algamal { 1. B -> M : B, PK(B), certB 2. M -> B : { K }_PK(B)^Algamal 3. B -> M : { Nb }_K 4. M -> B : { M, PK(M), certM, { Nb }_SK(M)^Algamal }_K } // claim Secret(K), // Agreement(M,B,K,K), // Agreement(M,B,Nb,Nb)