Blindsign - RSA
(1)Alice选取盲因子 k 然后计算 m
(2)Bob对 t 签名
(3)Alice通过计算揭开
(4)结果为:
证明:
Java Sample:
public class BlindSign {
public static void main(String[] args) {
BigInteger e = new BigInteger("65537");
BigInteger d = new BigInteger("60530511629930072241945671200867889027539295362393257858025617298274206834041");
BigInteger n = new BigInteger("99418278299100976004220175767913358809660152882550697543248103911741071816073");
BigInteger factor = new BigInteger("10879736607308378083");
BigInteger m = new BigInteger("1234567890");
BigInteger blindMsg = blindHideMsg(m, factor, e, n);
BigInteger blindSig = blindSignature(blindMsg, d, n);
BigInteger sig = blindRetriveSig(blindSig, factor, n);
BigInteger realSig = m.modPow(d, n);
System.out.println("Message = " + m);
System.out.println("Blind Hide Message = " + blindMsg);
System.out.println("Blind Sign = " + blindSig);
System.out.println("Blind Retrive Sign = " + sig);
System.out.println("Sign = " + realSig);
}
public static BigInteger blindHideMsg(BigInteger msg, BigInteger factor, BigInteger e, BigInteger n) {
BigInteger hideMsg = msg.multiply(factor.modPow(e, n)).mod(n);
return hideMsg;
}
public static BigInteger blindSignature(BigInteger blindMsg, BigInteger d, BigInteger n) {
BigInteger blindSig = blindMsg.modPow(d, n);
return blindSig;
}
public static BigInteger blindRetriveSig(BigInteger blindSig, BigInteger factor, BigInteger n) {
BigInteger signature = blindSig.multiply(factor.modInverse(n)).mod(n);
return signature;
}
}
Outputs:
Message = 1234567890
Blind Hide Message = 15770710624832124090310228670897217355377164232670135463798104068560510146688
Blind Sign = 6139941993099585616261360618307345010100687512790350833813455369950720416299
Blind Retrive Sign = 73713217373639814035571155058840977138482078089410370766097424658230579955022
Sign = 73713217373639814035571155058840977138482078089410370766097424658230579955022