| ||||
| ||||
Доброе время суток. У меня возникла немножко странная задача сравнить два файла. Один файл имеет цифровую подпись, у второго таковой нету. Нужно установить равно ли их вместимое не принимая к вниманию цифровую подпись. Сравнение побайтное. т.е. вопрос: как удалить подпись из файла? Или узнать её значение для подальшего удаления/игнорирования. Спасибо всем кто ответит. | ||||
Ответы: | ||||
| ||||
Зависит от способа подписывания. Есть масса вариантов: - кодировка base64, base 64 с заголовками, DER, - включается ли в подписанное сообщение сертификат - включается ли в подписанное сообщение crl и т.д. Если скажете, каким приложением делается подпись - можно сказать конкретнее. | ||||
| ||||
Я не знаю каким приложением подписываются файлы, но в 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. | ||||
| ||||
Вообще-то, странная задача - снять подпись, если неизвестно, как она сделана... | ||||
| ||||
Идея в том, что нужно зделать программу, которая смогла бы установить где есть подпись, т.е. оффсет начала и конца, в файле и удалить её. Потом побайтно сравнить содержимое файла с подписью и файла опосля этих процедур. Т.е. будет ли програма, которой принадлежит файл, работать после удаления подписи. | ||||
| ||||
Оффсет не критично устанавливать, но в общих чертах это выглядит так, как я описал выше. | ||||
| ||||
Формат PKCS7 не имеет жесткой привязки к оффсетам. Вам лучше воспользоваться lowlevel функциями CryptoAPI - CryptMsgOpenToDecode, CryptMsgGetParam(.., CMSG_CONTENT_PARAM, ..) | ||||