每日总结-第四十二天-密码学

https://blog.51cto.com/13479739/2484361
有关13种常见密码学算法的一个系列

分组加密算法

DES

长度:8字节,加密轮数:16
https://xz.aliyun.com/t/6748
识别:S盒,IP置换表,P置换表

AES

AES 密钥长度(32位比特字) 分组长度(32位比特字) 加密轮数
AES-128 4 4 10
AES-192 6 4 12
AES-256 8 4 14

加密轮数:10-14
https://www.anquanke.com/post/id/85656
识别:S盒(但是S盒可能是动态生成的)、列混合(矩阵乘法{ 2, 3, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 3, 1, 1, 2})、密钥生成时的轮常量(01000000, 02000000, 04000000, 08000000, 10000000)

RC6

序列密码

RC4

Rabbit

主要有几个常数:

a0 = a3 = a6 = 0x4d34d34d
a1 = a4 = a7 = 0xd34d34d3
a2 = a5 = 0x34d34d34

Hash算法

Md5

https://blog.csdn.net/u012611878/article/details/54000607
对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
第一步、填充:如果输入信息的长度(bit)对512求余的结果不等于448,就需要填充使得对512求余的结果等于448。填充的方法是填充一个1和n个0。填充完后,信息的长度就为Nx512+448(bit);
第二步、记录信息长度:用64位来存储填充前信息长度。这64位加在第一步结果的后面,这样信息长度就变为N512+448+64=(N+1)512位。
第三步、装入标准的幻数(四个整数):标准的幻数(物理顺序)是(A=(01234567)16,B=(89ABCDEF)16,C=(FEDCBA98)16,D=(76543210)16)。
第四步、四轮循环运算:循环的次数是分组的个数(N+1)

SHA1

SHA1算法的输入是最大长度小于2^64比特的消息,输入消息以512比特的分组为单位处理,输出是160比特的消息摘要。SHA1的初始化散列值:
H0 = 0x67452301
H1 = 0xEFCDAB89
H2 = 0x98BADCFE
H3 = 0x10325476
H4 = 0xC3D2E1F0

SHA256

SHA256算法的输入是最大长度小于2^64比特的消息,输出是256比特的消息摘要,输入以512比特的分组为单位处理。
SHA256中用到两种常量:
8个哈希初值=>自然数中前8个质数(2,3,5,7,11,13,17,19)的平方根的小数部分取前32bit :
h0 := 0x6a09e667
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19
64个哈希常量=>自然数中前64个质数(2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97…)的立方根的小数部分取前32bit :
428a2f98 71374491 b5c0fbcf e9b5dba5
3956c25b 59f111f1 923f82a4 ab1c5ed5
......

SHA512

SHA256算法的输入是最大长度小于2^128比特的消息,输出是512比特的消息摘要,输入以1024比特的分组为单位处理。
H(0)0 = 6a09e667f3bcc908
H(0)1 = bb67ae8584caa73b
H(0)2 = 3c6ef372fe94f82b
H(0)3 = a54ff53a5f1d36f1
H(0)4 = 510e527fade682d1
H(0)5 = 9b05688c2b3e6c1f
H(0)6 = 1f83d9abfb41bd6b
H(0)7 = 5be0cd19137e2179

非对称加密

DH密钥交换

http://wsfdl.com/algorithm/2016/02/04/%E7%90%86%E8%A7%A3Diffie-Hellman%E5%AF%86%E9%92%A5%E4%BA%A4%E6%8D%A2%E7%AE%97%E6%B3%95.html

RSA

https://www.cnblogs.com/P201521440001/p/11439344.html#cjsEEbwk

ElGamal

https://www.jianshu.com/p/cd36ae7dca47
安全基础:离散对数求解的困难性

椭圆曲线公钥加密体制

https://xz.aliyun.com/t/6295
有限域GF(p)上的椭圆曲线:
y^3 \equiv x^3 + ax + b(mod\;p)
p是大素数,a、b、x和y均在有限域GF(p)中,且满足4a^3 + 27b^2(mod\;p) \neq 0,通常用E_p(a, b)表示。

MH背包公钥加密体制

基础:超递增序列背包问题的解容易求得。
密钥生成:A={a_1, a_2, ..., a_n}是一个超递增整数序列,取素数p、b, p > a_1+a_2+...+a_n, 1<=b<=p-1,计算t_i \equiv ba_i(mod\;p), 1<=i<=n则公钥为t=(t_1, t_2, ..., t_n)和p,私钥为A和b
加密算法:设明文块二进制表示为m=m_1m_2...m_n,则使用加密算法c \equiv t_1m_1+t_2m_2+...+t_nm_n(mod\;p)
解密算法:通过公式S \equiv b^-1c(mod\;p)计算得到S, 对超递增序列A以及整数S,利用超递增背包问题求解。

Rabin公钥加密体制

密钥生成:随机选取两个大素数p,q,并且p \equiv 3(mod\;4),q \equiv 3(mod\;4),将p,q作为私钥,n = p*q作为公钥
加密算法:设明文块为m(m<n),运用公式c \equiv m^2(mod\;n)进行加密
https://xz.aliyun.com/t/5113

分组密码工作模式

  • 电子密码本模式ECB


  • 密码分组链接模式CBC


  • 密码反馈模式CFB


  • 输出反馈模式OFB


  • 计数器模式(CTR)


填充方式

转载:https://www.jianshu.com/p/fbfc886a9f73
一个记录,侵删。

位填充

位填充可用于任意长度的信息。
在原始信息后添加一个“设定”位(“1”),再添加“重设”位(“0”)至要求的长度。“重设”位(“0”)的数量取决于原始信息末尾到块边缘的距离。其中填充的0的个数可以为0。
例如:
一段23位的信息可填充9位以填满一个32位的块

... | 1011 1001 1101 0100 0010 0111 0000 0000 |

位填充在很多哈希函数(例如MD5和SHA)中作为两步填充方案中的第一步。

字节填充

字节填充可用于可编码为整数字节(一个字节为8位)大小的信息。

ANSI X.923

块的大小为8字节,需要填充4字节

... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 04 |

无论原始信息的最后一个块是否满8字节,都需要在后面进行填充。所以DD DD DD DD 00 00 00 04中的00 00 00 04只能理解为填充信息,如果原始信息为DD DD DD DD 00 00 00 04,则填充后的结果应该为DD DD DD DD 00 00 00 04 | 00 00 00 00 00 00 00 08。如此便消除了歧义。

ISO 10126

块的最后一个字节写入填充的长度,其他填充位置写入随机数

... | DD DD DD DD DD DD DD DD | DD DD DD DD 81 A6 23 04 |

同样,为了避免歧义,如果长度刚好是8字节的整数倍则填充8字节

PKCS #5 & PKCS #7

每个填充字节的值是用于填充的字节的个数,即是说,若需要填充N个字节,则每个填充字节值都是N。填充的字节数取决于算法可以处理的最小数据块的字节数量。

... | DD DD DD DD DD DD DD DD | DD DD DD DD 04 04 04 04 |

任何情况下都需要填充。PKCS #5和PKCS #7填充方式相同,但PKCS #5仅为使用64位块大小的块密码定义使用。

ISO/IES 7816-4

ISO/IES 7816-4与位填充的方式相同,在需要填充的第一个位置填充80,之后填充多个00(00的个数可以为0)

... | DD DD DD DD DD DD DD DD | DD DD DD DD 80 00 00 00 |

补零

在块的最后填充0以达到块的定长

... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 00 |

该方式在原始信息末尾几个字节为00时同样会产生歧义,而且前面的方法无法解决该歧义。但0填充可以应用在从其他方面可以获知原始消息长度的情况下。通常0填充可以应用在二进制编码的字符串中,在字符串中,填充的0作为空字符而不需要显示。

Openssl中的填充方式

Openssl中的填充方式有以下几种

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