旧式的电子现金系统

电子货币是如何产生的呢?
应该由受信任的当局(即银行)生成。
银行可以为现金签署数字字符串,使其成为电子货币,数字字符串包含:
钱的值,序列号,银行ID
每个电子货币对应着唯一的序列号和银行ID,这样可以有效的防止伪造。
每一个 e-coin 都必须是银行认证过的。
然而这个系统有两个个致命的问题:
1。 用户可以复制数字字符串(带有银行签名)使一个电子货币多次重复使用。
2。 无法保证用户隐私。
因为每个数字货币银行都可以通过序列号查到签署时的拥有者,这意味着无论用户在哪里消费,只要商家收到电子货币,向银行求证其真实有效的时候,银行就可以知道这个用户在什么时间什么地方使用了这个电子货币。
因此引出了这两个问题的解决办法。
如何防止双重消费?
如果银行保持24小时在线
收款人收到电子硬币时与银行核对。
如果之前没有消费,受款人接受电子硬币和并将电子货币存到银行。
如果电子货币已经被使用过,则拒绝付款
如果银行离线
需要借助其他相应的算法和技术,这里不做介绍。
如何实现支付者匿名?
可以使用盲签名。

盲签名的基本思想是:
Alice想要Bob在他的m上签名,同时又不想让Bob知道m的相关内容信息。
所以Alice把m放在信封里加密,将加密后的信封给Bob。
Bob收到信封后不用打开信封。他在信封上用一个颜色特别深的笔签名,笔水不只签到了信封上,还透过了信封签到了m上。
最后Bob把签过名的信封还给Alice,这样Alice就获得了Bob在m上的签名。
盲签名的算法实现:
RSA盲签名
如果不清楚RSA算法的可以回顾下我这篇文章:
https://blog.csdn.net/Jifu_M/article/details/112237697.
Sign:
• Input a message M, compute m = H(M)
• Compute S = m^d mod N
• Verify:
• Input a message M and a signature S
• Check S^e = H(M) mod N
盲签:
选择一个随机值r
计算m = H(m)
计算B = (r^e m) mod N
将B发送给签名者
签名者计算C = B^d mod N.
签名者将C返回给用户.
用户计算S = C/r mod N.
//为什么S = C/r mod N?
该公式由数学公式换算得到。

盲签名的使用
付款人生成电子货币M =(价值,序列号,银行ID)
付款方将货币价值和隐藏后的M发送给银行。
银行从付款人的帐户中扣除价值,并在隐藏后的M上盲签。
付款人解除隐藏以获得银行在M上的正常签名。
这存在一个问题就是,银行如何确保用户给出的值与M中的值相同?
如果付款人说签一个10块钱的电子货币,结果里面隐藏的M是100块怎么办?
如何防止用户在盲签名上作弊?
通常使用的方法是让用户准备 N 个诶同样价值的盲币,之后银行让用户去打开其中 N-1 个,如果那 N-1 都没问题,那么就给剩下的一个签字。
举个例子:准备 100 个加密后的盲币,银行准备签名第 83 个,所以银行让用户用 r 解
开其他 99 个,如果这 99 个都没问题,那就签第 83个。
这算是一种概率论的方法,这样用户在盲签名上作弊的概率只有百分之一。
Reference
- Wenbo Mao, Modern Cryptography, Prentice-Hall, 2003.
- Jonathan Katz and Yehuda Lindell, Introduction to Modern Cryptography, 2nd Edition, CRC Press, 2015.
- W Stallings, Cryptography and Network Security, Fourth (or later) Edition, Prentice Hall, 2006.
- J. Pieprzyk, T, Hardjono and J. Seberry, Cryptography: an introduction to computer security,
Springer Verlag, 2003. - Guo, F., Susilo, W., Mu, Y. Introduction to Security Reduction, Springer, 2018.
本文探讨了旧式电子现金系统的双重消费问题和用户隐私问题,并介绍了RSA盲签名技术来解决这些问题。通过盲签名,银行可以在不知道具体交易信息的情况下进行签名,确保支付者的匿名性。同时,通过特定的验证机制,防止用户在盲签名上作弊,从而保障电子货币的安全使用。

6038

被折叠的 条评论
为什么被折叠?



