基于RSA的数字签名方案

算法分析

  1. RSA签名方案是目前使用较多的一个签名方案,它的安全性是基于大整数因式分解的困难性。
  2. 主要包括算法:
  • 秘钥生成算法:


  • 签名算法:


    验证算法:



算法实现

# 直接导入之前写好的RSA算法和hash函数的hashlib库
from RSA import *
import hashlib


# 秘钥生成算法
pubkey = []
selfkey = []
'''公钥私钥中用到的两个大素数数p,q,都是1024位'''
p = 106697219132480173106064317148705638676529121742557567770857687729397446898790451577487723991083173010242416863238099716044775658681981821407922722052778958942891831033512463262741053961681512908218003840408526915629689432111480588966800949428079015682624591636010678691927285321708935076221951173426894836169
q = 144819424465842307806353672547344125290716753535239658417883828941232509622838692761917211806963011168822281666033695157426515864265527046213326145174398018859056439431422867957079149967592078894410082695714160599647180947207504108618794637872261572262805565517756922288320779308895819726074229154002310375209
'''生成公钥私钥'''
pubkey, selfkey = gen_key(p, q)

# 签名算法
m = b"helloworld"
md = hashlib.md5()
md.update(m)
# 用MD5算法生成消息摘要hm
hm = int(md.hexdigest(), 16)
print("Alice生成的消息摘要为: \n", hm)
# 计算签名
# Alice用自己的私钥计算签名s
s = encrypt(hm, selfkey)
print("Alice计算出的签名s为:  \n", s)
# Alice将(m, s)发送个Bob

# 验证算法
# Bob验证签名是否有效
flag = True
# Bob用公钥计算出消息摘要
res = decrypt(s, pubkey)
print("Bob计算出的消息摘要为: \n", res)
if res == hm:
    flag =True
else:
    flag = False
# 将验证结果输出
if flag == True:
    print("Alice的签名有效")
else:
    print("Alice的签名无效")


签名与验证过程

如下图所示,消息m = “helloworld” , 使用RSA算法中生成的公钥和私钥,Alice通过私钥对消息摘要进行签名得到s , Bob通过公钥根据签名s计算出消息摘要,并将其与Alice发来的消息摘要进行对比,如果相等,则打印出签名有效,否则打印出签名无效。



正确性

签名验证过程的正确性证明如下:



安全性分析

  1. 签名中使用了hash函数,哈希函数的使用使签名具有更好的抗攻击性。如果不使用,则可根据RSA方案所具有的同态特性,根据已知的两个签名,生成伪造的消息签名。具体如下:如果消息𝑀1、𝑀2的签名分别是𝑆1和𝑆2,则任何知道𝑀1,𝑆1,𝑀2,𝑆2的人可以伪造对消息𝑀1𝑀2的签名𝑆1𝑆2,因为
    𝑆𝑖𝑔(𝑀1𝑀2) = 𝑆𝑖𝑔(𝑀1)𝑆𝑖𝑔(𝑀2)

  2. 若未使用hash函数,还可以尝试一般攻击:攻击者任选一个数据𝑌,用A的公钥计算𝑋=Y^e𝑚𝑜𝑑 𝑛 于是便可以用Y伪造A对消息X的签名,因为


  3. 存在签名的可重用性问题,即对同一消息在不同时刻签名是相同的。这个问题可通过在每次签名中引入不同随机数来解决。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容