09.11.2006 20:50:04Игнорировать/удалить цифровую подпись. Ответов: 6
Fedryk
Доброе время суток.

У меня возникла немножко странная задача сравнить два файла. Один файл имеет цифровую подпись, у второго таковой нету. Нужно установить равно ли их вместимое не принимая к вниманию цифровую подпись. Сравнение побайтное.

т.е. вопрос: как удалить подпись из файла? Или узнать её значение для подальшего удаления/игнорирования.

Спасибо всем кто ответит.
 
Ответы:
10.11.2006 10:42:20Василий
Зависит от способа подписывания. Есть масса вариантов:
- кодировка base64, base 64 с заголовками, DER,
- включается ли в подписанное сообщение сертификат
- включается ли в подписанное сообщение crl
и т.д.
Если скажете, каким приложением делается подпись - можно сказать конкретнее.
10.11.2006 13:13:46Fedryk
Я не знаю каким приложением подписываются файлы, но в signature details я нашел следующее:

- issuer "CN = VeriSign Class 3 Code Signing 2004 CA
OU = Terms of use at https://www.verisign.com/rpa (c)04
OU = VeriSign Trust Network
O = VeriSign, Inc.
C = US"

- digest algorithm: "sha1".

- digest encryption algorithm: "RSA".

- counter sign:
30 82 01 e8 02 01 01 30 0......0
67 30 53 31 0b 30 09 06 g0S1.0..
03 55 04 06 13 02 55 53 .U....US
31 17 30 15 06 03 55 04 1.0...U.
0a 13 0e 56 65 72 69 53 ...VeriS
69 67 6e 2c 20 49 6e 63 ign, Inc
2e 31 2b 30 29 06 03 55 .1+0)..U
04 03 13 22 56 65 72 69 ..."Veri
53 69 67 6e 20 54 69 6d Sign Tim
65 20 53 74 61 6d 70 69 e Stampi
6e 67 20 53 65 72 76 69 ng Servi
63 65 73 20 43 41 02 10 ces CA..
0d e9 2b f0 d4 d8 29 88 ..+...).
18 32 05 09 5e 9a 76 88 .2..^.v.
30 0c 06 08 2a 86 48 86 0...*.H.
f7 0d 02 05 05 00 a0 59 .......Y
30 18 06 09 2a 86 48 86 0...*.H.
f7 0d 01 09 03 31 0b 06 .....1..
09 2a 86 48 86 f7 0d 01 .*.H....
07 01 30 1c 06 09 2a 86 ..0...*.
48 86 f7 0d 01 09 05 31 H......1
0f 17 0d 30 36 31 31 30 ...06110
38 30 32 32 39 30 32 5a 8022902Z
30 1f 06 09 2a 86 48 86 0...*.H.
f7 0d 01 09 04 31 12 04 .....1..
10 11 b3 e8 b2 91 28 3d ......(=
ff 1b 35 be 03 5a a1 7a ..5..Z.z
bd 30 0d 06 09 2a 86 48 .0...*.H
86 f7 0d 01 01 01 05 00 ........
04 82 01 00 8b 23 6b 74 .....#kt
83 a4 69 1e 4b df b4 79 ..i.K..y
4f d2 9c cb 87 53 fa 07 O....S..
4b e9 e2 18 9e 46 6a 6c K....Fjl
3d 76 3d e1 e6 aa 5e d5 =v=...^.
f7 09 91 45 00 eb 62 b4 ...E..b.
93 38 23 d9 d0 44 d9 16 .8#..D..
3c 7e 4a 99 b2 aa 67 87 <~J...g.
e5 97 60 0a bf b6 64 c6 ..`...d.
4d 47 a8 6c 80 13 20 a5 MG.l.. .
8a 1f 76 1f 45 5f c2 6a ..v.E_.j
8a cf 00 0d 91 57 52 88 .....WR.
07 7d 35 44 de 76 30 41 .}5D.v0A
08 4a ce 26 2f fc 41 df .J.&/.A.
e8 20 51 7d fd 56 1f 2f . Q}.V./
8d 3a 18 eb 5c e0 ee 8a .:..\...
a2 6d 32 3e 2b af 0f db .m2>+...
fa 91 79 16 43 31 f1 ff ..y.C1..
0a fa a2 5e cb 39 3a a0 ...^.9:.
51 1e cb 19 6a ba 40 58 Q...j.@X
a5 9a 36 5e 2e 66 53 f6 ..6^.fS.
c8 51 83 7f 66 d0 d2 c7 .Q.f...
53 e5 0d 7d a4 53 bc 16 S..}.S..
a3 ff 8a e8 b4 c8 2c 8b ......,.
14 92 62 45 47 16 23 ef ..bEG.#.
cf 09 a5 aa 09 ba 9b 7b .......{
44 50 ee 58 2c 28 5b e8 DP.X,([.
0e ec 29 2c 64 da 38 65 ..),d.8e
ce 82 d3 59 7c f1 29 13 ...Y|.).
f8 77 a3 d6 d5 54 52 7a .w...TRz
da a0 7d df b5 73 bf c4 ..}..s..
e5 09 e9 fb da 5f e5 22 ....._."
01 97 43 ae ..C.
10.11.2006 14:31:58Василий
Вообще-то, странная задача - снять подпись, если неизвестно, как она сделана...
10.11.2006 18:29:47Fedryk
Идея в том, что нужно зделать программу, которая смогла бы установить где есть подпись, т.е. оффсет начала и конца, в файле и удалить её. Потом побайтно сравнить содержимое файла с подписью и файла опосля этих процедур. Т.е. будет ли програма, которой принадлежит файл, работать после удаления подписи.
10.11.2006 18:32:02Fedryk
Оффсет не критично устанавливать, но в общих чертах это выглядит так, как я описал выше.
13.11.2006 12:15:32Kirill Sobolev
Формат PKCS7 не имеет жесткой привязки к оффсетам. Вам лучше воспользоваться lowlevel функциями CryptoAPI - CryptMsgOpenToDecode, CryptMsgGetParam(.., CMSG_CONTENT_PARAM, ..)