準同型暗号による秘密裡の計算 RSA
library(openssl) # RSAの乗算の準同型の確認 # RSAの鍵 e <- 17 p <- 61 # 素数 q <- 53 # 素数 n <- p * q d <- 413 # m1とm2とを暗号化し # 暗号化されたM1,M2のみを使って # m1 x m2 の値の暗号化された値を作り # 返却する # 返却された人は、こっそりm1 x m2の値を知ることができる m1 <- 6 m2 <- 3 m3 <- m1 * m2 # 暗号化 M1 <- bignum_mod_exp(bignum(m1),bignum(e),bignum(n)) M2 <- bignum_mod_exp(bignum(m2),bignum(e),bignum(n)) # m1, m2 の値を知っていれば、m3 = m1 x m2 を計算して # その暗号を作ることはできるが、それはできない仕掛け # M3 <- bignum_mod_exp(bignum(m3),bignum(e),bignum(n)) M3_angou <- M1 * M2 # 暗号化されたM3 (M3_angou)を秘密鍵で開く bignum_mod_exp(M3_angou,bignum(d),bignum(n)) m1 * m2 m3