Этот код относится к DKIM signature verification, используемому в усилиях по борьбе со спамом.Что необходимо для преобразования данных ASN.1 в открытый ключ? например как определить OID?
У меня есть byte[]
от s1024._domainkey.yahoo.com
, который закодирован в ASN.1, но я не знаю, содержит ли это только достаточно информации для создания открытого ключа.
На основании this class, похоже, я могу преобразовать ключ ASN.1 в открытый ключ X509Certificate, но мне нужно указать OID и некоторые ASN.1-кодированные параметры.
В этом примере есть метаданные, что ключ является ASN1:
- ПДС кодируется ключом (ASN.1 DER-закодированные [МСЭ-X660-1997] RSAPublicKey в RFC3447)
- Используется либо с алгоритмы хеширования sha1 sha256
- Использует OID, относящуюся к следующей таблице из раздела А.2 RFC3447 (хотя я не знаю, как превратить эту информацию в полном OID)
/*
* 1.2.840.113549.1
*
MD2 md2WithRSAEncryption ::= {pkcs-1 2}
MD5 md5WithRSAEncryption ::= {pkcs-1 4}
SHA-1 sha1WithRSAEncryption ::= {pkcs-1 5}
SHA-256 sha256WithRSAEncryption ::= {pkcs-1 11}
SHA-384 sha384WithRSAEncryption ::= {pkcs-1 12}
SHA-512 sha512WithRSAEncryption ::= {pkcs-1 13}
*/
Пример кода
string pubkey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB";
byte[] pubkeyByteArray = Convert.FromBase64String(pubkey);
AsnEncodedData aData = new AsnEncodedData(pubkeyByteArray);
// OID must not be null, but it is here. What is it?
System.Security.Cryptography.X509Certificates.PublicKey pubKeyRdr = new System.Security.Cryptography.X509Certificates.PublicKey(aData.Oid, null, aData);
Вопрос
- Что OID я должен использовать?
- Каковы примеры параметров ASN.1?
Не похоже, что 'AsnEncodedData' фактически анализирует данные. Вам нужно будет установить oid через: aData.Oid = new Oid ("1.2.840.113549.1.1") '. После разбора DER-TLV вы можете использовать [oid tool] (http://www.rtner.de/software/oid.html) для преобразования шестнадцатеричных данных в строковое представление, * UNIVERSAL OID.1.2.840.113549.1.1. 1 *. – user845279
Вот связанный с этим вопрос, который касается только ключа, 'CspParameters' и' RSACryptoServiceProvider': [Загружать ASN.1/DER закодированную пару ключей RSA в C#] (http://stackoverflow.com/q/42175485/608639). Я указываю на это, потому что многие ответы переполнения стека говорят, что вы делаете что-то с сертификатами или используете BouncyCastle, когда все, что вы делаете, пытается загрузить ключ. Также обратите внимание ... точка боли связана с .Net и их использованием кодировки XML из [RFC 3275] (https://www.ietf.org/rfc/rfc3275.txt). .Net не принимает ключи ASN.1/DER или PEM. – jww