zoukankan      html  css  js  c++  java
  • 密码学

    今天做了一个思考题,加深了对数字签名的理解,问题如下:

    电子投票的应用十分广泛,假设投票者以电子文档形式把选票发给选举机构(Election Authority, EA)

    (1)每位投票者填写选票,并用 EA 的公钥加密选票;

    (2)EA 把所有选票解密并统计,然后宣布选举结果。

    试分析上述协议的问题?并设计出安全的投票协议。

    解答:

    存在的问题:

    由于 EA 的公钥是公开的,也就是说不能确定投票者的身份,所以可能存在有人恶意刷票的风险,EA 也检测不出来。

    解决方案:

    ① 投票者先对电子文档消息 m 做 Hash 得到消息摘要 s,然后用自己的私钥 a 加密 s;

    ② 投票者采用对称密码算法加密电子文档的消息得到,并用 EA 的公钥 b 加密该对称密钥 key;

    ③ 投票者将加密后的消息、加密后的消息摘要以及加密后的对称密码发给 EA;

    ④ EA 收到投票者发来的信息后,先使用自己的私钥解密出对称密钥 key,

    ⑤ 然后用 key 解密出消息 m' ,然后对 m' 做 Hash 得到 s' ,

    ⑥ 接着用该投票者的公钥解密收到的被加密的消息摘要,得到 s; 

    ⑦ 比较 s' 和 s 是否相等,若相等,则证明消息未被篡改,否则被篡改了。

    原理图:

    总结:

    以上的方案不仅能够确认投票者的真实身份(因为只有自己才有自己的私钥),还实现了消息的加密。

  • 相关阅读:
    Unity 小笔记
    UE4 Pure函数的特点
    C++ const总结
    配色问题lingo实现
    选址问题lingo求解
    迷宫问题python实现(靠右手摸墙)
    环形队列C++实现
    排队论的C实现
    递归实现全排列序列C语言实现
    双人贪吃蛇小游戏C++原创
  • 原文地址:https://www.cnblogs.com/yytest/p/12832758.html
Copyright © 2011-2022 走看看