驗簽
M為明文驱富,(r,s)為簽名結(jié)果,用戶公鑰P
實現(xiàn)步驟:
e=hash(M)
t=(r+s) mod n
(x,y)=[s]G + [t]P
R=(e+x)mod n
計算R==?r
簽名者用戶A的密鑰對包括其私鑰dA和公鑰PA=[dA]G= (xA,yA)
l? 簽名者用戶A具有長度為entlenA比特的可辨別標識IDA褐鸥,
l? ENTLA是由整數(shù)entlenA轉(zhuǎn)換而成的兩個字節(jié)
l??ZA=SM3(ENTLA || IDA || a || b || xG || yG|| xA || yA)赐稽。
l? 消息為M浑侥,數(shù)字簽名(r,s)
用國密局的自簽名SM2證書來示范
MIICaDCCAgygAwIBAgIJAK8ocl2Y0zFDMAwGCCqBHM9VAYN1BQAwfTELMAkGA1UEBgwCY24xCz
AJBgNVBAgMAmJqMQswCQYDVQQHDAJiajEPMA0GA1UECgwGdG9wc2VjMQ8wDQYDVQQLDAZ0b
3BzZWMxETAPBgNVBAMMCFRvcHNlY0NBMR8wHQYJKoZIhvcNAQkBDBBiakB0b3BzZWMuY29tLm
NuMB4XDTEyMDYyNDA3NTQzOVoXDTMyMDYyMDA3NTQzOVowfTELMAkGA1UEBgwCY24xCzAJB
gNVBAgMAmJqMQswCQYDVQQHDAJiajEPMA0GA1UECgwGdG9wc2VjMQ8wDQYDVQQLDAZ0b3Bz
ZWMxETAPBgNVBAMMCFRvcHNlY0NBMR8wHQYJKoZIhvcNAQkBDBBiakB0b3BzZWMuY29tLmNuM
FkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE1pwvHuw7+2uVswwoCFx3sSXXepw5Ul2BkHaPN9ayB
bWJ3NMWu+fYmp3CGRfxd5nmmFMfXm4+EL0xNwslnD+Bw6NzMHEwDwYDVR0TAQH/BAUwAwEB
/zAdBgNVHQ4EFgQUjl2QNHhYuqrYcNi9+6aoXntWO2QwHwYDVR0jBBgwFoAUjl2QNHhYuqrYcNi9+
6aoXntWO2QwCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIAVzAMBggqgRzPVQGDdQU
AA0gAMEUCIQCGqTACsUVb7KXmi8E5pqJtyWpKj1Mm0vPokvH6ondQKwIgFH5vrHQjncD1e9avYQB
SF9fxplgZ/tdU9nxDgh2HnRU=
經(jīng)過BASE64解碼后
30 82 02 68 30 82 02 0C A0 03 02 01 02 02 09 00 AF 28 72 5D 98 D3 31 43 30 0C 06 08 2A 81 1C CF 55 01 83 75 05 00 30 7D 31 0B 30 09 06 03 55 04 06 0C 02 63 6E 31 0B 30 09 06 03 55 04 08 0C 02 62 6A 31 0B 30 09 06 03 55 04 07 0C 02 62 6A 31 0F 30 0D 06 03 55 04 0A 0C 06 74 6F 70 73 65 63 31 0F 30 0D 06 03 55 04 0B 0C 06 74 6F 70 73 65 63 31 11 30 0F 06 03 55 04 03 0C 08 54 6F 70 73 65 63 43 41 31 1F 30 1D 06 09 2A 86 48 86 F7 0D 01 09 01 0C 10 62 6A 40 74 6F 70 73 65 63 2E 63 6F 6D 2E 63 6E 30 1E 17 0D 31 32 30 36 32 34 30 37 35 34 33 39 5A 17 0D 33 32 30 36 32 30 30 37 35 34 33 39 5A 30 7D 31 0B 30 09 06 03 55 04 06 0C 02 63 6E 31 0B 30 09 06 03 55 04 08 0C 02 62 6A 31 0B 30 09 06 03 55 04 07 0C 02 62 6A 31 0F 30 0D 06 03 55 04 0A 0C 06 74 6F 70 73 65 63 31 0F 30 0D 06 03 55 04 0B 0C 06 74 6F 70 73 65 63 31 11 30 0F 06 03 55 04 03 0C 08 54 6F 70 73 65 63 43 41 31 1F 30 1D 06 09 2A 86 48 86 F7 0D 01 09 01 0C 10 62 6A 40 74 6F 70 73 65 63 2E 63 6F 6D 2E 63 6E 30 59 30 13 06 07 2A 86 48 CE 3D 02 01 06 08 2A 81 1C CF 55 01 82 2D 03 42 00 04 D6 9C 2F 1E EC 3B FB 6B 95 B3 0C 28 08 5C 77 B1 25 D7 7A 9C 39 52 5D 81 90 76 8F 37 D6 B2 05 B5 89 DC D3 16 BB E7 D8 9A 9D C2 19 17 F1 77 99 E6 98 53 1F 5E 6E 3E 10 BD 31 37 0B 25 9C 3F 81 C3 A3 73 30 71 30 0F 06 03 55 1D 13 01 01 FF 04 05 30 03 01 01 FF 30 1D 06 03 55 1D 0E 04 16 04 14 8E 5D 90 34 78 58 BA AA D8 70 D8 BD FB A6 A8 5E 7B 56 3B 64 30 1F 06 03 55 1D 23 04 18 30 16 80 14 8E 5D 90 34 78 58 BA AA D8 70 D8 BD FB A6 A8 5E 7B 56 3B 64 30 0B 06 03 55 1D 0F 04 04 03 02 01 06 30 11 06 09 60 86 48 01 86 F8 42 01 01 04 04 03 02 00 57 30 0C 06 08 2A 81 1C CF 55 01 83 75 05 00 03 48 00 30 45 02 21 00 86 A9 30 02 B1 45 5B EC A5 E6 8B C1 39 A6 A2 6D C9 6A 4A 8F 53 26 D2 F3 E8 92 F1 FA A2 77 50 2B 02 20 14 7E 6F AC 74 23 9D C0 F5 7B D6 AF 61 00 52 17 D7 F1 A6 58 19 FE D7 54 F6 7C 43 82 1D 87 9D 15?
再解析TLV格式,得到如下表格
公鑰X:D6 9C 2F 1E EC 3B FB 6B 95 B3 0C 28 08 5C 77 B1 25 D7 7A 9C 39 52 5D 81 90 76 8F 37 D6 B2 05 B5
公鑰Y:89 DC D3 16 BB E7 D8 9A 9D C2 19 17 F1 77 99 E6 98 53 1F 5E 6E 3E 10 BD 31 37 0B 25 9C 3F 81 C3
簽名后的數(shù)據(jù):86 A9 30 02 B1 45 5B EC A5 E6 8B C1 39 A6 A2 6D C9 6A 4A 8F 53 26 D2 F3 E8 92 F1 FA A2 77 50 2B 14 7E 6F AC 74 23 9D C0 F5 7B D6 AF 61 00 52 17 D7 F1 A6 58 19 FE D7 54 F6 7C 43 82 1D 87 9D 15
取證書數(shù)據(jù)的第二層TAG的第一個TAG 30(即30 82 02 0C加上后面長度為20c的數(shù)據(jù)),得到數(shù)據(jù)M
注意:國密局的SM2證書驗簽時考蕾,需要對上面的數(shù)據(jù)進行數(shù)據(jù)填充(填充方式詳見PBOC3.0規(guī)范第17部分)会宪。
我猜測是這樣的規(guī)則:如果簽名后的數(shù)據(jù)不是TLV格式的,則直接進行SM3計算塞帐,否則就需要進行數(shù)據(jù)填充巍沙。
下面一步步對數(shù)據(jù)進行操作:
第一步,組建數(shù)據(jù)ZA并計算HASH值
00 80(用戶ID的bit位長度)
31 32 33 34 35 36 37 38 31 32 33 34 35 36 37 38(用戶ID)
FF FF FF FE FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 00 00 FF FF FF FF FF FF FF FC (橢圓曲線公鑰密碼算法推薦曲線參數(shù)a)
28 E9 FA 9E 9D 9F 5E 34 4D 5A 9E 4B CF 65 09 A7 F3 97 89 F5 15 AB 8F 92 DD BC BD 41 4D 94 0E 93 (橢圓曲線公鑰密碼算法推薦曲線參數(shù)b)
32 C4 AE 2C 1F 19 81 19 5F 99 04 46 6A 39 C9 94 8F E3 0B BF F2 66 0B E1 71 5A 45
89 33 4C 74 C7 (橢圓曲線公鑰密碼算法推薦曲線參數(shù)Gx)
BC 37 36 A2 F4 F6 77 9C 59 BD CE E3 6B 69 21 53 D0 A9 87 7C C6 2A 47 40 02 DF 32 E5 21 39 F0 A0(橢圓曲線公鑰密碼算法推薦曲線參數(shù)Gy)
D6 9C 2F 1E EC 3B FB 6B 95 B3 0C 28 08 5C 77 B1 25 D7 7A 9C 39 52 5D 81 90 76 8F 37 D6 B2 05 B5(公鑰X)
89 DC D3 16 BB E7 D8 9A 9D C2 19 17 F1 77 99 E6 98 53 1F 5E 6E 3E 10 BD 31 37 0B 25 9C 3F 81 C3(公鑰Y)
對上面數(shù)據(jù)進行SM3計算得到
4D 38 D2 95 8C A7 FD 2C FA E3 AF 04 48 69 59 CF 92 C8 EF 48 E8 B8 3A 05 C1 12 E7 39 D5 F1 81 D0
第二步榔幸,上面的SM3結(jié)果加上數(shù)據(jù)M矮嫉,再進行SM3計算得到
HASH值:C3 B0 2E 50 0A 8B 60 B7 7D ED CF 6F 4C 11 BE F8 D5 6E 5C DE 70 8C 72 06 56 54 FD 7B 21 67 91 5A
最后再做
t=(r+s) mod n
(x,y)=[s]G + [t]P
R=(e+x)mod n
計算R==?r,相等則驗簽通過拨齐!