基于RSA的盲签名算法Java实现
来源:互联网 发布:js字符串转unicode 编辑:程序博客网 时间:2024/06/02 02:46
目录
- 目录
- 盲签名概念
- 基于RSA的盲签名原理
- Java实现
- 参考书目
盲签名概念
盲签名(Blind Signature): Alice有个数据想让Bob签名,但是不想让Bob知道真实的数据,于是有了盲签名的概念。盲签名在很多地方都有许多应用,如电子投票等。
一个通俗的解释是:Alice想让Bob在一张信件上签名,但是不想让B看到信件上面写的字,于是Alice在信件上面放了一张复写纸然后将信件和复写纸放到了信封中交给Bob。Bob在拿到了信封之后直接在信封上面签字,这样字迹就通过复写纸写到了信件上面,Alice拿到了信封之后就可以得到Bob签字过的信件。
基于RSA的盲签名原理
前提:Bob的公开密钥
(1)Alice选取盲因子
(2)Bob对
(3)Alice通过计算揭开
(4)结果为:
证明:
这个证明过程是存在问题的,问题会在代码是现阶段暴露出来,后面会有朔宁。
Java实现
import java.math.BigInteger;/** * 盲签名相关 * Created by forest on 2017/5/23. */public class blindSignature { public static void main(String[] args){ System.out.println("这里是盲签名测试"); BigInteger e = new BigInteger("32663"); BigInteger d = new BigInteger("23"); BigInteger n = new BigInteger("42167"); BigInteger m = new BigInteger("123"); //签名的消息 BigInteger factor = new BigInteger("37"); //盲因子 BigInteger blindMsg = blindHideMsg(m, factor, e, n); BigInteger blindSig = blindSignature(blindMsg, d, n); BigInteger sig = blindRetriveSig(blindSig, factor, n); System.out.println("盲签名 = " + sig); BigInteger realSig = m.modPow(d, n); System.out.println("原签名 = " + 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.divide(factor); return signature; }}
测试结果
这里是盲签名测试盲签名 = 957原签名 = 14633
我们可以看到这里的盲签名与原签名不一致,问题出在解盲的过程中不应该采用除法而应该采用乘法求逆元。正确代码如下:
/**盲签名-解盲得到签名*/ public static BigInteger blindRetriveSig(BigInteger blindSig, BigInteger factor, BigInteger n){ BigInteger signature = blindSig.multiply(factor.modInverse(n)).mod(n); return signature; }
结果为
这里是盲签名测试盲签名 = 14633原签名 = 14633
错误来源
正确的应该是
参考书目
《应用密码学-协议、算法与C源程序》第二版23.12节
阅读全文
0 0
- 基于RSA的盲签名算法Java实现
- Java的RSA签名
- 基于java类库的签名算法实现
- RSA算法的Java实现
- 基于JDK的RSA算法实现数字签名
- 基于python的简单 RSA算法实现
- 基于JAVA的RSA算法详解
- RSA的签名认证实现
- RSA签名验证的JAVA JDK实现方式
- RSA算法Java实现
- Java实现RSA算法
- JAVA实现RSA算法
- RSA算法Java实现
- java实现RSA算法
- RSA算法Java实现
- 关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
- 关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
- RSA算法Java的简单实现
- 复习jquery 笔记 版本1.2.1,jquery in action 总结细节
- 游戏引擎架构----动画
- PCIe简介及引脚定义
- os中存储字节,临界区
- react native ViewPagerAndroid 使用详解
- 基于RSA的盲签名算法Java实现
- Eclipse建立Maven项目后无法建立src/main/java资源文件夹
- 从阿里云上购买服务器,链接数据库显示错误:provider: 命名管道提供程序, error: 40
- 从个人习惯到真正的好方法
- Tomcat服务器
- Rex
- Java对大文件MD5解密详解
- form表单提交onclick和onsubmit
- forceUpdate是什么