Я пытаюсь провести обратный инжиниринг пользовательского формата S / MIME, который представляет собой измененное многочастное текстовое подписанное сообщение с необычным полем Content-Type и специальным форматом подписи, который является модифицированной структурой CMS. Я выяснил структуру подписи ASN.1, но я борюсь с тем, чтобы выяснить, как переварить сообщение, чтобы оно соответствовало атрибуту message-digest в данных подписи. Алгоритм дайджеста известен, но я подозреваю, что не знаю точно, что переваривается, и S / MIME RFC очень неоднозначны по этому поводу, говоря, что дайджест должен включать заголовки MIME, но не заголовки IMF.
Пример использования <lf>
для обозначения линий, которые разделены только LF, в отличие от CRLF, используемого MIME:
Content-Type: multipart/alternative; boundary="2965b92c-139c-4e0f-b79c-b7b7abfe329b"
MIME-Version: 1.0
From: Version Service/1.0
Subject: pro/bgdl
--2965b92c-139c-4e0f-b79c-b7b7abfe329b
Content-Disposition: version
Region!STRING:0|BuildConfig!HEX:16|CDNConfig!HEX:16|KeyRing!HEX:16|BuildId!DEC:4|VersionsName!String:0|ProductConfig!HEX:16<lf>
## seqn = 100354<lf>
--2965b92c-139c-4e0f-b79c-b7b7abfe329b
Content-Transfer-Encoding: Base64
Content-Type: application/pkcs7-signature
Content-Disposition: signature
MIIB3gYJKoZIhvcNAQcCoIIBzzCCAcsCAQMxDTALBglghkgBZQMEAgEwCwYJKoZIhvcNAQcBMYIBqDCCAaQCAQOAFLGVGOVGkUf+<lf>
1muoyOWfxmphdgSNMAsGCWCGSAFlAwQCAaBpMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE5MDUy<lf>
MTE3NTQxNVowLwYJKoZIhvcNAQkEMSIEIEVoHvQLIrCHhKdCZ5a7jGuAGK8nJQqMW66RUxbFnpGbMA0GCSqGSIb3DQEBAQUABIIB<lf>
AGC76DFGXP939kkj97Z9nMCELb6/LMD5kT89dEnwhiSlHx8w195aC9ZiiqckPmoKoLNW715R2BLoea2iFzHux2JUfPFe1bujfNY9<lf>
B8o+MY96lDroPmYlgf3uEZqtCqjJ1KHIjKb8eUxYGiYaPSSE/avKc+sdoZUn7rInJyDKBh1Nh3RE+d1yqy52fYQobUbTRN9Z/I+E<lf>
fExSqF1ayc75Rt/fN35FwPdLCZ5Qd7v+tcv5nIggjaNwLeONGrDe2trKDgXaLDTrI1kCs52EdLPxfzRUTWBjgL3imbDCBgBte7J6<lf>
kW+SnyoY7cvnrDX52nCKsRoqEaCGJ6SZBWz4yDLRnqQ=
--2965b92c-139c-4e0f-b79c-b7b7abfe329b--
Checksum: 4ad2a42bcddb0423d225a98cd6887833174db7c999e3f8a80804cac2f880bfd1
Что именно я должен здесь хэшировать? В этом примере используется SHA-256, а дайджест сообщения в данных подписи - 45681EF40B22B08784A7426796BB8C6B8018AF27250A8C5BAE915316C59E919B. Но SHA-256 из двух строк тела (с использованием открытого текста, без специальной кодировки) имеет вид CE71BF477BE30850974C637A8287CD028E57039F3A4D1C3BDA8F6960E724F616, и ряд других вариантов, которые я пробовал, также не смогли воспроизвести подпись.