0
2
,
s
k
0
3
sk_0=sk_0^1, sk_0^2, sk_0^3
sk0=sk01,sk02,sk03
s
k
1
=
s
k
1
1
,
s
k
1
2
,
s
k
1
3
sk_1=sk_1^1, sk_1^2, sk_1^3
sk1=sk11,sk12,sk13
为了与上面的原始版本对比,
s
k
1
sk_1
sk1我们还是使用上面的3个密钥,有:
s
k
1
=
9
,
A
,
E
sk_1=9, A, E
sk1=9,A,E
即
s
k
1
1
=
9
,
s
k
1
2
=
A
,
s
k
1
3
=
E
sk_1^1=9, sk_1^2=A, sk_1^3=E
sk11=9,sk12=A,sk13=E
我们随机生成sk0
s
k
0
=
B
,
C
,
4
sk_0 = B, C, 4
sk0=B,C,4
因此密钥为
S
K
=
[
B
,
C
,
4
9
,
A
,
E
]
SK=\begin{bmatrix} B, C, 4\ 9, A, E\end{bmatrix}
SK=[B,C,49,A,E]
2. 生成公钥:还是使用哈希函数H(x),对私钥进行运算,得到公钥。我们现在称公钥(Public Ksy)为
P
K
PK
PK
有:
P
K
=
H
(
S
K
)
,
P
K
=
(
p
k
0
,
p
k
1
)
PK = H(SK), PK=(pk_0, pk_1)
PK=H(SK),PK=(pk0,pk1)
具体来讲:
p
k
0
i
=
H
(
s
k
0
i
)
,
p
k
1
i
=
H
(
s
k
1
i
)
,
i
∈
{
1
,
2
,
3
}
pk_0i=H(sk_0i), pk_1i=H(sk_1i), \ i \in{1,2,3}
pk0i=H(sk0i),pk1i=H(sk1i), i∈{1,2,3}
为了与上面的原始版本对比,
p
k
1
pk_1
pk1我们还是使用上面的3个公钥,有:
s
k
1
=
5
,
D
,
2
sk_1=5,D,2
sk1=5,D,2
我们随机生成pk0
p
k
0
=
F
,
3
,
6
pk_0 = F, 3, 6
pk0=F,3,6
因此公钥为
P
K
=
[
F
,
3
,
6
5
,
D
,
2
]
PK=\begin{bmatrix} F, 3, 6 \ 5,D,2 \end{bmatrix}
PK=[F,3,65,D,2]
然后Sender包公钥公布于众
3. Sender发送明文和签名,明文就是010
。签名是这样的,当明文为0
时,对应位置上的签名为
s
k
0
i
sk_0^i
sk0i,当明文为1
时,对应位置上的签名就是相应的
s
k
1
i
sk_1^i
sk1i。因此这里的签名Signature是BA4
4. Receiver接收到签名。开始验证,第一个bit是0,因此将Signature的第一个位B
做哈希运算H(B)=F,得到的结果是F
,这和
p
k
0
1
pk_0^1
pk01对应,这没有问题。然后第二bit是1
,对应的signature是A
,对其进行哈希运算,H(A) = D,得到的结果是D
,这和公钥中对应位置的数
p
k
1
2
pk_1^2
pk12是一样的,因此也没有问题。第三个bit以此类推。验证完毕后,receiver可以确定这个010
是sender发出来的了。
签名:
验证:
安全性:
2.2.2 该方案的缺点
最明显的缺点就是,私钥和公钥都很大,是Massage的bit数的两倍。当Massage很大的时候,签名和公钥就变得很大。
2.3 第二代改进 Merkle 1990
该方案是1990年Merkle在《A CERTIFIED DIGITAL SIGNATURE》中的第四节“4. An Improved One Time Signature”中提出的方案。
2.3.1 具体流程
这一代的具体流程和原始版本是一样的,不同的地方是,在整个Massage后面,加上了一个数,用于校验Massage中0
的个数,这个数被称为“校验和”(Checksum)
- 计算Massage中
0
的个数,这里Massage时010
,因此0
的个数为2,在3bit的Massage中0
最多有3个,因此要额外用2bit的位置表示校验和,因此加上校验和(Checksum)后的Massage为010 10
。同时我们可以和容易的算出,n
bit的Massage只需要在后面加上
l
o
g
2
n
log_2n
log2n bit的校验和即可。我们都知道
l
o
g
2
n
log_2n
log2n是远小于
n
n
n的,因此可以节省很多空间,这样密钥对的大小就可以被大大减小了。
2. 生成私钥:因为多了2bit的校验和,因此要随机生成3+2
个不同的数,密钥:9 A E 5 0
3. 生成公钥:使用哈希函数H(x),对私钥进行运算,得到公钥。最后得到的公钥是5D267
4. Sender发送明文和签名,明文就是010 10
。签名是这样的,当明文为0
时,对应位置上的签名为空,当明文为1
时,对应位置上的签名就是相应的私钥。因此这里的签名Signature是空A空 5空
5. Receiver接收到签名。开始验证,signature上空
的位置和massage中0
的位置是对应的,这没有问题。然后再对signature中的A
进行哈希运算,H(A) = D,得到的结果是D
,这和公钥中对应位置的数是一样的,因此也没有问题。校验和的两位也是同理。好了,验证完毕,receiver可以确定这个010
是sender发出来的了。
为什么这样做就是安全的呢?如果攻击者,把原Massage中的1
修改成0
,校验和也一起改,这样不行吗?
答案是不行的。首先我们先想想,校验和我们可以改成什么?我们只能把原本为1
的改成0
,通过这个操作,你只能把校验和减小,而不能变大。由于校验和代表的是原Massage中0的个数,也就是说通过改变校验和,我们只能把原Massage中0的个数减小,但是我们只能把1
的改成0
,也是增加0的个数。
是不是很巧妙?所以通过这样死锁,保证了这种方案安全性。
2.3.2 该方案的总结
该方案是1990年Merkle在《A CERTIFIED DIGITAL SIGNATURE》中的第四节“4. An Improved One Time Signature”中提到对OTS的改进。对于一个长度为n的massage,之前需要使用
2
∗
n
2*n
2∗n长度的key,而现在只需要
n
l
o
g
2
n
n+log_2 n
n+log2n,大大减小了key的长度。
2.4 第三代改进 Winternitz 1979
1979年,斯坦福大学数学系的罗伯特·温特尼茨(Robert Winternitz)提出了一个进一步的实质性改进,将签名消息的大小额外减少了大约4到8倍。Winternitz的方法用时间换取了空间:减少的尺寸是以增加的计算工作量来换取的。
2.4.1 具体流程
这一代的具体流程和前面的3个版本都有挺大差别,他从另一个角度来减小签名的大小。
假设我们现在有一个32bit
的massage
- 分块:首先将massage分块,每一块的大小一般为
4bit
或者8bit
,这里我们使用8bit
,因此massage被分成4块。每一块就是1byte
。因为8bit可以表示0-255,所以我们直接用十进制来表示massage,我们的32bit的massage是0 1 2 3
写成二进制就是0000 0000 - 0000 0001 - 0000 0010 - 0000 0011
- 计算校验和:这里的校验和就是每一块数据的和,
0+1+2+3=6
,因此这里校验和是6
。在这个例子中,校验和最大为4*255=1020
因此需要额外的10bit
来表示校验和。加上校验和后的massage为0000 0000 - 0000 0001 - 0000 0010 - 0000 0011 -- 00 0000 0110
。最后的明文0000 0000 - 0000 0001 - 0000 0010 - 0000 0011 -- 0000 0000 - 0000 0110
,这里为了方便,把校验和中的6bit变成2byte,所以现在一共是6byte。 - 生成私钥:生成
4
个私钥,每一个私钥对于原massage中的一个byte。比如说私钥为A B C D
。但是一个byte有256种可能,而私钥只有一个,怎么一一对应起来呢?这就涉及到后面公钥是怎么生产的了。 - 生产签名:最神奇的地方来了。对于massage的第一个byte,是
0
,因此第一个signature就是对应位置上的A
。如果第一个byte是1
,则signature是对应位置上的A
做一次哈希运算
H
(
A
)
H(A)
H(A);如果第一个byte是2
,则signature是对应位置上的A
做两次哈希运算
H
(
H
(
A
)
)
=
H
2
(
A
)
H(H(A))=H^2(A)
H(H(A))=H2(A);以此类推;如果如果第一个byte是255
,则signature是对应位置上的A
做255次哈希运算
H
255
(
A
)
H^{255}(A)
H255(A)。根据这个规则,最后得到的4个byte的signature是
A
,
H
(
B
)
,
H
2
(
C
)
,
H
3
(
D
)
A,\ H(B),\ H2©, H3(D)
A, H(B), H2©, H3(D) 。后面校验和的signature还是使用之前的签名方法。
5. 产生公钥:公钥就是将密钥做256次哈希运算后得到的值:
H
256
(
A
)
,
H
256
(
B
)
,
H
256
(
C
)
,
H
256
(
D
)
H{256}(A), H{256}(B),\ H{256}©, H{256}(D)
H256(A), H256(B), H256©, H256(D) 。后面校验和的公钥还是使用之前的方法,
p
k
5
,
p
k
6
pk_5,\ pk_6
pk5, pk6。Sender将公钥公布于众。
6. Sender发送明文和签名:明文0000 0000 - 0000 0001 - 0000 0010 - 0000 0011 -- 0000 0000 - 0000 0110
.签名
A
,
H
(
B
)
,
H
2
(
C
)
,
H
3
(
D
)
,
s
k
5
,
s
k
6
A,\ H(B),\ H2©, H3(D),\ sk_5,\ sk_6
A, H(B), H2©, H3(D), sk5, sk6
7. Receiver验证:对于第一个byte: 0
,把对应的签名
A
A
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
给大家整理的电子书资料:
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
)
,
H
3
(
D
)
,
s
k
5
,
s
k
6
A,\ H(B),\ H2©, H3(D),\ sk_5,\ sk_6
A, H(B), H2©, H3(D), sk5, sk6
7. Receiver验证:对于第一个byte: 0
,把对应的签名
A
A
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-gtcakmNP-1713043632412)]
[外链图片转存中…(img-cZk4kxzT-1713043632413)]
[外链图片转存中…(img-CEk1t1TQ-1713043632413)]
[外链图片转存中…(img-qKvFsI46-1713043632413)]
[外链图片转存中…(img-1g8erzja-1713043632413)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
[外链图片转存中…(img-eGSanVD1-1713043632414)]
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
[外链图片转存中…(img-YZWTpLIl-1713043632414)]
给大家整理的电子书资料:
[外链图片转存中…(img-bc0Verej-1713043632414)]
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-VsoDCRQ4-1713043632414)]