中华人民共和国国家标准
信息技术安全技术idt
带消息恢复的数字签名方案
GB15851-1995ISO/IEC9796:1991
Informationtechnology-Securitytechniques
Digitalsignatureschemegivingmessagerecovery
(国家技术监督局1995年12月13日发布1996年8月1日实施)
一范围
本标准规定了对有限长消息使用公开密钥体制的带消息恢复的数学签名方案。
这种数学签名方案包含下列两个进程:
――签名进程,它使用秘密签名密钥和签名函数来对消息签名;
――验证进程,它使用公开验证密钥和验证函数来验证签名,同时恢复出消息。
签名进程中,必要时,欲签名的消息需填充和扩展,然后加上与消息本身有关的人为的冗余,对消息中是否存在自然的冗余不作假定。这人为的冗余将由验证进程揭示出来,把这人为的冗余去掉便恢复出消息。
本标准不规定密钥产生进程、签名函数和验证函数。附录A(提示的附录)给出了一个公开密钥体制的例子,包含密钥产生、签名函数和验证函数。附录B(提示的附录)通过例子来说明这些操作的各步。
这个方案中的若干参数与安全性有关:本标准不规定为要达到给定的安全性水平而对这些参数应取什么值。然而以这样一种方式规定,即在本标准使用中,如果这些参数中有的必须要改变时,使所作的改变最小。
二定义
本标准采用下列定义
2.1消息message
有限长的比特串。
2.2签名signature
由签名进程最后得到的比特串。
三符号和缩略语
MP填充后的消息
ME扩展后的消息
MR带冗余的扩展后的消息
IR中间整数
∑签名
Ks签名的比特数
IR’恢复后的中间整数
MR’恢复后的带冗余的消息
MP’恢复后的填充了的消息
Sign秘密签名密钥控制下的签名函数
Verif公开验证密钥控制下的验证函数 modz模z的算术计算
μ半字节
П半字节置换
m字节
S字节的影子
X‖YX和Y两个比特串的级联
X⊕YX和Y两个比特串的异或
注:
1所有整数(比特串或字节串)其最高有效数字(位或字节)在左边。
2表1和附录B(提示的附录)中采用了0到9和A到F的十六进制记法。
四概述
下面两章规定:
――第5章中的签名进程;
――第6章中的验证进程
每个签名实体应使用其自己的对应于公开验证密钥的签名密钥并将其保密。
如有必要,欲签名的消息应当填充和扩展,然后按照第5章规定的规则加上冗余,对此带冗余的扩展消息,如第5章规定的那样,用秘密签名密钥计算其签名。
每个验证实体都会知道并使用该签名实体特定的公开验证密钥,当且仅当第6章规定的验证进程获得成功,签名才是可接受的。
注:密钥的产生与分配已超出本标准的范围。
五签名进程
图1概括了这种签名进程。
图1签名进程
注:这种签名进程较好的实现方法应当对这些操作加以物理保护,使得无法对秘密签名密钥控制下的签名函数进行直接访问。
5.1填充
消息是一个比特串,在其左边添上0到7个0以便获得一个z字节的串。指数r(后面将用到)是填充0的数目加1,因此r的值为1到8。从而,在填充后的消息MP中,8z+1-r个最低有效位是信息位。
MP=mz‖mz-1‖…m2‖m1
Mz=(r-1个填充的0)‖(9-r个信息位)
z乘上16后的数应小于或等于ks+3。因此待签名消息的比特数最多应是小于或等于(ks+3)/16的最大整数的8倍。
5.2扩展
数t(后面要用到)是满足2t字节串至少包含ks–1个比特的最小整数。
扩展后的消息ME的获得是通过依次在左边不断重复MP的z字节,直到形成t字节串为止。对于i从1到t,j等于(i-1)modz加上1(所以j从1到z),ME的第i字节等于MP的第j字节。
ME=…mz‖…mz‖m1‖
T字节
注:数z小于或等于t,只有当ks模16同余于13、14、15、0或1时,两者才可能相等。5.3冗余通过交替地将ME的t字节放在奇数位置上,将t字节冗余放在偶数位置上便得到带冗余的扩展后的消息MR。MR的第2z字节的低半字节经指数r对其修改后,便由其值和位置对消息长度进行了编码。
对i从1到t,
――MR的第(2i-1)字节等于ME的第i字节;
――MR的第2i字节等于ME的第i字节按表1规定的影子S的像,但第2z字节例外,它等于ME的第z字节的影子与指数r异或的结果。
MR=…S(mz)⊕r‖mz‖…S(m2)‖m2‖S(m1)‖m1
2t字节
注:从MP(mpZ到mp1)的z个字节计算MR(mr2t到mr1)的2t个字节是通过对i从1到t连续地
应用下列三个公式完成的。j:=((i-1)modz)+1;mr2i-1:=mpj;mr2i:=s(mpj)。最后,第2z字节再经指数r修改。mr2z:=r⊕mr2z。
5.4截取和强置
中间整数IR是用ks比特串来编码的,其最高有效位为1,ks–1个最低有效位便是MR的ks–
1个最低有效位,但最低有效字节被替代了,如果μ2‖μ1是MR的最低有效字节,则IR的最低有效字节是μ1‖6。
5.5签名产生
在秘密签名密钥的控制下,对IR应用签名函数就得到ks比特串的签名Σ。
Σ=Sign(IR)
表1置换Ⅱ和影子S
μ
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
∏μ
E
3
5
8
9
4
2
F
0
D
B
6
7
A
C
1
如果μ由a4a3a2a1四比特组成,在置换∏下的像用∏(μ)表示,则为a4⊕a2⊕a1⊕1;a4
⊕a3⊕a1⊕1;a4⊕a3⊕a2⊕1;a3⊕a2⊕a1。
如果字节m由两个半字节μ2μ1组成,在影子S下的像用S(m)表示,则为∏(μ2)∏(μ1)
六验证进程
图2验证进程
图2概括了验证进程。
6.1签名开启
在公开验证密钥的控制下,通过对签名Σ应用验证函数将其变换成恢复后的中间整数IR’。
IR’=Verif(Σ)
如果IR’不是一个最高有效位为1和最低有效半字节为6的ks比特串,则该签名Σ将被拒绝。
6.2消息恢复
恢复后的带冗余的消息MR’是一个2t字节串,其(1-ks)(mo16)个最高有效位为0,而
ks-1个最低有效位便是IR’的ks-1人最低有效位,但最低有效字节需被替代。按照表1中
规定的置换∏,如果μ1‖μ2‖μ3‖6是IR¢的最低有效四个半字节,则MR’的最低有效
字节应是Ⅱ-1(μ4)‖μ2。
MR’=m2t‖m2t-1‖…m2‖m1
注:MR和MR’这两串可能不等,MR’是由MR的ks-1个最低有效位且在其最高有效位填充了0
到15个0后组成的。
从MR’的2t个字节,计算出t个和,按照表1中规定的影子S,第i个和等于第2i个字节与第
(2i-1)个字节的影子的异或。
m2iS(m2i-1)
如果t个和都是0,则签名Σ将被拒绝。
Z恢复成第1个非零和的位置,恢复后的填充了的消息MP’便是MR’中奇数位置上z个最低有
效字节组成的串。
MP’=m2z-1‖m2z-3‖…m2i-1‖…m3‖m1
指数r恢复成第1个非零和的最低有效半字节的值。
如果指数r不取1到8之间的值,或MP’的r-1个最高有效位不全为0,则签名Σ将被拒绝。
m2z-1=(r-1个填充的0)‖(9-r个信息位)
消息被恢复成MP’的8z+1-r个最低有效位组成的串。
6.3冗余校验
当且仅当MR’的ks-1个最低有效位等于由恢复后的填充了的消息MP’,按照5.2和5.3计算
出的带冗余的扩展后的消息的ks-1个最低有效位时,签名Σ才被接受。
附录A
(提示的附录)
用于数字签名的公开密钥体制例子
一定义
模数modulus
两个素数的乘积构成的整数。
公开验证密钥publicverificationkey
模数和验证指数。
秘密签名密钥secretsignaturekey
签名指数
二符号和缩略语
RR代表元素
IS合成整数
n模数
k模数的比特长度
p,q模数的素因子
v验证指数
s签名指数
lcm(a,b)整数a和b的最小公倍数
(a∣n)a关于n的雅可比(Jacobi)符号
注:设p是奇素数,并设a是一个正整数,则整数a关于素数p的勒让德(Legendre)符号用下
列式子定义:
(a∣p)=a(p-1)/2modp
当a不是p的倍数时,则整数a关于素数p的勒让德符号取值为+1或-1,它取决于整数a是或
不是模p的平方。P的倍数关于素数p的勒让德符号为0。
设n为奇正整数,并设a是一个正整数,整数a关于整数n的雅可比符号等于整数a关于n的素因子
的勒让德符号之乘积。所以,如果n=pq,则(a∣n)=(a∣p)(a∣q)
任何整数a关于任何整数n的雅可比符号可以有效地计算而无需知道n的素因子。
三密钥产生
A3.1公开验证指数
每个签名实体都应选择一个正整数v作为其公开验证指数。在特定的应用中,公开验证指数
可以标准化。
注:公开验证指数取为2和3会有一些特别的优点。
A3.2秘密的素因子和公开的模数
每个签名实体应当秘密地且随机地选取两个不同的奇素数p和q,它们满足下列条件:
――如果v是奇数,则p-1和q-1都应当与v互素;
――如果v是偶数,则(p-1)/2和(q-1)/2都应当与v互素,且p和q不应当模8同余。
公开模数n就是秘密素因子p和q的乘积。
n=pq
模数的长度为k,k应当等于ks+1。
注
关于素数选取的若干别的条件也应当很好地考虑,以便防止对模数的因子分解。
有些形式的模数有简单的模约简运算且只需少量的存储表。这些形式是
Fx,y-:n=264x-c其长度:k=64x比特,
Fx,y+:n=264x+c其长度:k=64x+1比特,
其中:1≤y≤2x且c<264x-8y<2c。
在负形式中,y个最高有效字节的所有位均是1,其数目可达到模数长度的四分之一。
在正形式中,在取值为1的最高有效位之后,y个最高有效字节的所有位均是0,其数
目可达模数长度的四分之一。
A3.3秘密签名指数
秘密签名指数是使得sv-1为下列数的倍数的最小正整数s:
――1cm(p-1,q-1),若v是奇数;
――1/21cm(p-1,q-1),若v是偶数。
四签名函数
中间整数IR是按5.4所述计算出的k-1比特串。
IR关于n的代表元素记为RR。
――如果v是奇数,则RR就是IR;
――如果v是偶数且(IR∣n)=+1,则RR是IR;
――如果v是偶数且(IR∣n)=-1,则RR是IR/2。
注:如果v是偶数,则RR关于n的雅可比符号强置为+1。
对RR计算其模n的s次幂,签名∑便是此计算结果或者是其关于n的补,取其中较小者。
∑=min{RRsmodn,n-(RRsmodn)
这就定义了签名函数“Sign”。
∑=Sign(IR)
五验证函数
签名∑是小于n/2的正整数,对其进行模n的v次幂以得到合成整数IS。
于是,恢复后的中间整数IR’用下列译码确定:
――如果IS是模16同余6,则IR’就是IS;
――如果n-IS是模16同余6,则IR’是n-IS。
而且,当v是偶数时,
――如果IS是模8同余3,则IR’是2IS;
――如果n-IS是模8同余3,则IR’是2(n-IS)。
所有其他情况,签名∑都应被拒绝,而且,如果IR’不落在2k-2到22k-1-1范围内,
签名也应被拒绝。
这便定义了验证函数“Verif”。
IR’=Verif(∑)
附录B
(提示的附录)
关于附录A(提示的附录)的说明实例
(使用十六进制记法)
一公开指数为3的例子
B1.1密钥产生
公开验证指数v为3。
所以秘密素因子都是模3余2。
p=BA09106C754EB6FEBBC214799FF1B8DE
1B4CBB7A7A782B157C1BC15290A1A3AB
q=16046EB39E03BEAB621D03C08B8AE6B66
CFF955B64B4F48B7EE152A326BF8CB25
513比特的公开模数n具有形式2512+c,其中2c>2384>c(形式Fx,y,+其x=8,y=16)。
n=pq=100000000000000000000000000000000
BBA2D15DBB303C8A21C5EBBCBAE52B71
25087920DD7CDF358EA119FD66FB0640
12EC8CE692F0A0B8E8321B041ACD40B7
秘密签名指数s为(n-p-q+3)/6。
s=2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
C9F0783A49DD5F6C5AF651F4C9D0DC92
81C96A3F16A85F9572D7CC3F2D0F25A9
CBF1149E4CDC32273FAADD3FDA5DCDA7
B1.2变量的长度
z是小于或等于(k+2)/16的正整数,t是小于或等于(k+13)/16的最大整数。
因而,当k为513时,
――z取值从1到32,待签名的消息为1到256比特的串,填充后的消息MP和MP’为1到32字节的
串;
――t为32,扩展后的消息ME为32字节的串,带冗余的消息MR和MR’为64字节的串。
而且,中间整数IR和IR’及签名Σ都是512比特(k-1个比特)的串。
B1.3例1
本例说明了对100比特消息签名的填充、扩展和截取过程。该消息为:
CBBAA99887766554433221100
签名进程
在左边填充了四个0以后,填充后的消息MP便是13字节的串,所以z=13,r=5。
MP=OCBBAA99887766554433221100
通过将MP的13个相连字节不断重复,依次排在左边,直至达到32个字节的串,便构成扩展后
的消息ME。
ME=5544332211000CBBAA99887766554433
2211000CBBAA99887766554433221100
带冗余的扩展后的消息MR是一个64字节的串,它是通过将ME的32个字节和冗余的32个字节交
替排列而得到的,第26个字节的修改(E2)给出了消息边界的编码。
MR=44559944883355223311EE00E70C66BB
BBAADD990088FF772266445599448833
55223311EE00E20C66BBBBAADD990088
FF77226644559944883355223311EE00
中间整数IR是从MR通过下列方法得到的:截取511个比特,左边填充一个1,最低有效字节予
以替代,即μ2‖μ1=00代之以μ1‖6=06。因为v是奇数,所以代表元素RR便是IR。
RR=IR=C4559944883355223311EE00E70C66BB
BBAADD990088FF772266445599448833
55223311EE00E20C66BBBBAADD990088
FF77226644559944883355223311EE06
对RR计算其模n的s次幂,此处,签名Σ便是该计算结果关于n的补。
Σ=309F873D8DED8379490F6097EAAFDABC
137D3EBFD8F25AB5F138D56A719CDC52
6BDD022EA65DABAB920A81013A85D092
E04D3E421CAAB717C90D89EA45A8D23A
验证进程
签名Σ小于n/2,通过对Σ计算其模n的3次幂得到合成整数IS。
IS=3BAA66BB77CCAADDCCEE11FF18F39944
FFF7F3C4BAA73D12FF5FA76721A0A33D
CFE6460EEF7BFD2927E55E52896205B7
13756A804E9B07745FFEC5E1E7BB52B1
中间整数是512比特的串,其中最高有效位是1且最低有效半字节的值为6,因为n在这里是模
16余7且IS是模16余1,所以恢复后的中间整数IR’是n-IS。
1R’=n-IS=C4559944883355223311EE00E70C66BB
BBAADD990088FF772266445599448833
55223311EE00E20C66BBBBAADD990088
FF77226644559944883355223311EE06
恢复后的带冗余的消息MR’在这里便是64字节的串,其中,在一个填充的0后,接着便是
IR’的511个最低有效位,但最低有效字节例外,按照置换P中P(0)=E的说明,用μ4
‖
μ4‖μ2‖6表示的EE06将代之以m4‖m3‖?-1(m4)‖m2,其值为EE00。
MR’=44559944883355223311EE00E70C66BB
BBAADD990088FF772266445599448833
55223311EE00E20C66BBBBAADD990088
FF77226644559944883355223311EE00
第1个非零和是第13个和,值为5,这样z=13而r=5,恢复后的填充了的消息MP’就是MR’
的最低有效奇数位置中13个字节的串。
MP’=0CBBAA99887766554433221100
MP’的四个最高有效位(r-1=4)为0,因此消息本身就恢复为MP’的100个最低有效位
(8z+1-r=100)的串。
CBBAA99887766554433221100
这个签名是可被接受的,审因为恢复后的带冗余的消息MR’的511个最低有效位和由MP’计
算出的带冗余的扩展后的消息中的一样,而这种计算方法和由MP计算出MR的完全一样。
B1.4例2
本例说明了一种更简单的情况:256比特的消息对于513比特的模数既不需要填充也不需要扩
展。
FEDCBA9876543210FEDCBA9876543210
FEDCBA9876543210FEDCBA9876543210
签名进程
消息为256比特,恰恰编成32字节,所以z=32而r=1,该消息就是填充后的消息MP,也是扩
展后的消息ME。
ME=MP=FEDCBA9876543210FEDCBA9876543210
FEDCBA9876543210FEDCBA9876543210
扩展后的带冗余的消息MR是64字节的串。
MR=1DFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
通过对MR截取511比特,左边填充一个1以及替代最低有效字节便得到中间整数IR。因为v是
奇数,代表元素RR为IR。
RR=IR=9DFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E06
对RR计算其模n的s次幂,签名?在这里便是该计算结果。
Σ=319BB9BECB49F3ED1BCA26D0FCF09B0B
0A508E4D0BD43B350F959B72CD25B3AF
47D608FDCD248EADA74FBE19990DBEB9
BF0DA4B4E1200243A14E5CAB3F7E610C
验证进程
签名Σ小于n/2,通过对Σ计算其模n的3次幂便得到合成整数IS。因为此处IS是模16余1,因
此恢复后的中间整数IR’就是IS。
IR’=IS=9DFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E06
恢复后的带冗余的消息MR’便是64字节的串,其中,在一个填充的0后接着是IR’的511个最
低有效位,但最低有效字节例外,按照置换P中P(1)=3的说明,由m4‖m3‖m2
‖6表
示的3E06代之以m4‖m3‖?-1(m4)‖m2,其值为3E10。
MR’=1DFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
第1个非零和是第32个和,其值为1,这样z=32且r=1。恢复后的填充了的消息MP’是MR’中
奇数位置上的32字节的串。
MP’=FEDCBA9876543210FEDCBA9876543210
FEDCBA9876543210FEDCBA9876543210
恢复后的消息为256比特的串。
FEDCBA9876543210FEDCBA9876543210
FEDCBA9876543210FEDCBA9876543210
这个签名是可接受的,因为恢复后的带冗余的消息MR’的511个最低有效位和由MP’计算出
的带冗余的扩展后的消息中的一样,这种计算方法和由MP计算出MR的完全一样。
B2公开指数为3的另一个例子
B2.1密钥产生
公开验证指数为3,所以秘密素因子都是模3余2。
p=461908C5405B7952F69864C3B0683002
5650303D5297A4BD2F549A9D37CFE027
q=3A6EC260F3E2E0B2C106C51646D471D9E
0478317627010818E54CC26F7C0C892B
512比特的公开模数n具有形式2512-c,其中,2c>2488>c(形式Fx,y,-其
x=8,y=3)。
n=pq=FFFFFF7FA27087C35EBEAD78412D2BDF
FE0301EDD494DF13458974EA89B36470
8F7D0F5A00A50779DDF9F7D4CB80B889
1324DA251A860C4EC9EF288104B3858D
秘密签名指数s为(n-p-q+3)/6。
s=2AAAAA9545BD6BF5E51FC7940ADCDCA5
550080524E18CFD88B96E8D1C19DE612
1B13FAC0EB0495D47928E047724D91D1
740F6968457CE53EC8E24C9362CE84B5
B2.2变量的长度
因为k为512,所以
――z取值为1到32,待签名消息为1到256比特的串,填充后的消息MP和MP’是1到32字节
的
串;
――t为32,扩展后的消息ME为32字节的串,带冗余的消息MR和MR’是64字节的串。
而且,中间整数IR和IR’以及签名?均为511比特(k-1比特)的串。
B2.3例3
本例说明了对100比特消息签名的填充,扩展和截取过程,该消息为:
112233445566778899AABBCCD
签名进程
在左边填充四个0以后,填充后的消息MP为一个13字节的串,所以z=13,r=5。
MP=0112233445566778899AABBCCD
通过将MP的连续13个字节不断重复,依次排在左边,直至得到32字节的串。
ME=78899AABBCCD0112233445566778899A
ABBCCD0112233445566778899AABBCCD
扩展后的带冗余的消息MR是一个64字节的串,它是通过交替地排列ME的32个字节和冗余的32
个字节得到的,第26字节的修改给消息边界进行编码。
MR=F0780D89DB9AB6AB67BC7ACDE3013512
58238934944542562F67F0780D89DB9A
B6AB67BC7ACDE6013512582389349445
42562F67F0780D89DB9AB6AB67BC7ACD
中间整数IR是通过下列方法从MR得到的:先截取其510比特,再在左边填充一个1,最后替代
最低有效字节:m2‖m1=CD代之以m1‖6=D6。因为v是奇数,所以代表元素RR为IR。
RR=IR=70780D89DB9AB6AB67BC7ACDE3013512
58238934944542562F67F0780D89DB9A
B6AB67BC7ACDE6013512582389349445
42562F67F0780D89DB9AB6AB67BC7AD6
对RR计算其模n的s次幂,此处?便是该结果关于n的补。
S=58E59FFB4B1FB1BCDBF8D1FE9AFA3730
C78A318A1134F5791B7313D480FF07AC
319B068EDF8F212945CB09CF33DF30AC
E54F4A063FCCA0B732F4B662DC4E2454
验证进程
签名?小于n/2,对?计算其模n的3次幂就得到合成整数IS。
IS=8F87F1F5C6D5D117F70232AA5E2BF6CD
A5DF78B9404F9CBD162184727C2988D5
D8D1A79D85D72178A8E79FB1424C2443
D0CEAABD2A0DFEC4EE5471D59CF70AB7
中间整数是511比特的串,其中最高有效位为1,最低有效半字节的值为6。因为此外n是模16
余13,IS是模16余7,所以恢复后的中间整数IR’为n-IS。
IR’=N-IS=70780D89DB9AB6AB67BC7ACDE3013512
58238934944542562F67F0780D89DB9A
B6AB67BC7ACDE6013512582389349445
42562F67F0780D89DB9AB6AB67BC7AD6
恢复后的带冗余的消息MR’,便是64字节的串,其中在两个填充的0后接着是IR’的510个最
低有效位,但最低有效字节例外,按照置换?中?(c)=7的说明,由m4‖m3‖m
2‖6
表示的7AD6被m4‖m3‖?-1(m4)‖m2代替,其值为7ACD。
MR’=30780D89DB9AB6AB67BC7ACDE3013512
58238934944542562F67F0780D89DB9A
B6AB67BC7ACDE6013512582389349445
42562F67F0780D89DB9AB6AB67BC7ACD
第1个非零和是第13个和,其值为5,这样,z=13,r=5,恢复后的填充了的消息MP’便是MR’
的最低有效奇数位置上13个字节的串。
MP’=0112233445566778899AABBCCD
MP’的四个最高有效位(r-1=4)为0,消息本身便恢复为MP’的100个最低有效位(8z+1-
r=100)的串。
112233445566778899AABBCCD
这签名是可接受的,因为恢复后的带冗余的消息MR’的510个最低有效位和由MP’
计算出的带冗余的扩展后的消息中的一样,这种计算方法和由MP计算出MR的完全相同。
三公开指数为2的例子
B3.1密钥产生
公开验证指数v为2,所以,一个素因子为模8余3,另一个为模8余7。
P=867EA672E46B2B0A35F2F2F2719A1F3C
7EA059472B9DAE51A1730A282CDDBBE3
q=1E7468E3C4869473F094E740660B04CB4
8E47FB50196544DCC81D44928301850F
513位公开模数n具有形式2512+c,其中2c>2384>c(形式Fx,y,+其x=8,y=16)。
n=pq=100000000000000000000000000000000
97518F6AD742E4E3A1EDC7F6CB0F2226
F13439524E5466C2D596A9F9760FAD26
743E5D43D9AAA91EF0368F22B87DF14D
秘密签名指数s为(n-p-q+5)/8。
S=20000000000000000000000000000000
12EA31ED5AE85C9C743DB8FED961E444
906DE094642FFE8F32CAA8601478A826
ACEAC1159294F6BE10D4C80D0113D60C
B3.2变量的长度
因为k为513,所以
――z取值为1到32,待签名消息为1到256比特的串,填充后消息MP和MP’都为1到32字节的
串;
――t为32,扩展后消息ME为32字节的串,带冗余的消息MR和MR’均为64字节的串。而且,
中间整数IR和IR’以及签名?均为512比特(k-1比特)的串。
B3.3例4
本例说明了带强置雅可比符号的256比特消息的签名。
F123E123D123C123B123A12391238123
612351234123312321231123O123
签名进程
消息为256比特的串,恰好编码成32字节,所以z=32,r=1,填充后消息MP,扩展后消息ME
和该消息相同。
ME=MP=F123E123D123C123B123A12391238123
7123612351234123312321231123O123
带冗余的扩展后的消息MR为64字节的串。
MR=12F15823C3E15823A3D1582373C15823
63B15823B3A15823D391582303815823
F3715823236158234351582393415823
833158235321582333115823E3015823
通过截取MR的511比特,左边填充一个1,替代最低有效字节便得到中间整数IR。
1R=92F15823C3E15823A3D1582373C15823
63B15823B3A15823D391582303815823
F3715823236158234351582393415823
833158235321582333115823E3015836
因为IR关于n的雅可比符号为-1,所以代表元素RR为IR’/2。
RR=IR’/2=4978AC11E1F0AC11D1E8AC11B9E0AC11
B1D8AC11D9D0AC11E9C8AC1181C0AC11
F9B8AC1191B0AC11A1A8AC11C9A0AC11
C198AC11A990AC119988AC11F180AC1B
对RR计算其模n的s次幂,此处签名?就是该计算结果。
?=6BA03660D7A9001D533B01A605CAFD2A
1352E0D78776623C926FF2043B93E12B
E7D097AE506248153024E3C17CFA565D
F4F76FF2EC19C5079D11C723F0CE5071
验证进程
签名?小于n/2,对?计算模n平方得到合成整数IS。
IS=04978AC11E1F0AC11D1E8AC11B9E0AC11
B1D8AC11D9D0AC11E9C8AC1181C0AC11
F9B8AC1191B0AC11A1A8AC11C9A0AC11
C198AC11A990AC119988AC11F180AC1B
因为此处IS是模16余11,所以恢复后的中间整数IR’为2IS。
1R’=2IS=92F15823C3E15823A3D1582373C15823
63B15823B3A15823D391582303815823
F3715823236158234351582393415823
833158235321582333115823E3015836
恢复后的带冗余的消息MR’除了最高有效位强置成0以及最低有效字节被替代外(P-1
(5)=2),与IR’的相同。
MR’=12F15823C3E15823A3D1582373C15823
63B15823B3A15823D391582303815823
F3715823236158234351582393415823
833158235321582333115823E3015823
第1个非零和是第32个和,其值为1,这样,z=32,r=1,恢复后的填充了的消息MP’是MR’奇
数位置上的32字节串。
MP’=F123E123D123C123B123A12391238123
71236123512341233123212311230123
恢复后的消息就是256比特的串。
F123E123D123C123B123A12391238123
71236123512341233123212311230123
这个签名是可接受的,因为恢复后的带冗余的消息MR’的511个最低有效位和由MP’计算出
的带冗余的扩展后的消息中的一样,这种计算方法和由MP计算出MR的完全相同。
B3.4例5
最后这个例子说明了不需要强置雅可比符号的256比特消息的签名情况。
FEDCBA9876543210FEDCBA9876543210
FEDCBA9876543210FEDCBA9876543210
签名进程
消息是256比特的串,恰好编成32字节,所以z=32,r=1,填充后的消息MP和扩展后的消息ME都
是该消息。
ME=MP=FEDCBA9876543210FEDCBA9876543210
FEDCBA9876543210FEDCBA9876543210
带冗余的扩展后的消息MR是64字节的串。
MR=1DFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
通过截取MR的511比特,左边填充一个1替代最低有效字节就得到中间整数IR。由于IR关于n
的雅可比符号为+1,所以此处IR就是代表元素RR。
RR=1R=9DFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E06
对RR计算其模n的s次幂,结果便是签名?。
?=28910D1F0FC8332A63AFE10A37848404
84374DF9D0A92347DD1966E5976823EC
597A1AEC0D24FE710934D49B0CB0412F
E8A10CB0D39D1C06207B0000E9F33021
验证进程
签名?小于n/2,通过对?计算模n平方得到合成整数IS。
由于IS是模16余6,所以此处IS就是恢复后的中间整数IR’。
1R’=IS’=9DFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E06
恢复后的带冗余的消息MR’是64字节的串,它和IR’相同,但最高有效位需强置成0,最低
有效字节被替代掉(P-1(3)=1)。
MR’=1DFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
1CFEA7DC6BBAD098F276495485323E10
第1个非零和是第32个和,其值为1,这样,z=32,r=1。
恢复后的填充了的消息MP’就是MR’的奇数位置上32个字节的串。
MP’=FEDCBA9876543210FEDCBA9876543210
FEDCBA9876543210FEDCBA9876543210
恢复后的消息便是256比特的串。
FEDCBA9876543210FEDCBA9876543210
FEDCBA9876543210FEDCBA9876543210
这个签名是可接受的,因为恢复后的带冗余的消息MR’的511个最低有效位和由MP’计算出
的带冗余的扩展后的消息中的一样,这种计算方法和由MP计算出MR的完全相同。
附录C
(提示的附录) 为抵抗对附录A(提示的附录)各种潜在攻击所采取的若干预防措施
一秘密函数的合法自变量
函数“模n的s次幂”’的唯一的合法自变量就是代表元素。
如果v是奇数,所有代表元素都是k-1比特的串,其中最高有效位的值为1,最低有效半字节
的值为6。
如果v是偶数,则代表元素关于模数n的雅可比符号强置为+1且所有的代表元素都是下列情
况之一:
――若(IR∣n)=+1,则代表元素为k-1比特串,其中最高有效位的值为1,最低有效半字节
的值为6;
――若(IR∣n)=-1,则代表元素为k-2比特串,其中最高有效位的值是1,三个最低有效
位组成的串的值为3。
二四种运算的排除
由于代表元素的这种结构特性,下面四种运算可以不予考虑。
注:这些材料取自Eurocrypt90的一篇通信(见附录D(提示的附录)),该研讨会于1990年
5月21日至24日在丹麦的Arhus举行。
平移
代表元素的比特串编码不可能平移成另一个代表元素。
求补
代表元素的比特串编码不可能经求补后变成另一个代表元素。
普通乘法
代表元素与常数的变通乘积(即不进行模约简)不可能是另一个代表元素。
普通方幂
任何常数的普通v次幂(即不进行模约简)不可能是一个代表元素。
事实上,模16余6的整数不可能是某一数的幂;模8余3的数也不可能是某一数的偶次幂。
附灵D
(提示的附录)
参考文献
PrecautionstakenagainstvariouspotentialattacksinISO/IEC
9796,Digital
ignatureschemegivingmessagerecovery,LouisGUILLOU,Jean-Jacques
QUISQUATER,MikeWALKER,PeterLANDROCK,CarolineSHAER,Proceedingsof
Eurocrypt’
90,editedbylvanDAMGARDandpublishedbySpringer-Verlaginthe
series
“LectureNotesinComputerScience”,Vol473,pp465-473.