Действителен ли пример DKIM в RFC 6376 (и RFC 4871)?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Действителен ли пример DKIM в RFC 6376 (и RFC 4871)?

Сообщение Anonymous »

Я боролся с этим на протяжении многих лет и просто не могу отпустить это. Что бы я ни пытался, я не могу понять пример подписи электронной почты DKIM в Приложении А. Я проследил за ошибками, которые исправили заголовки в примере, само существование которого предполагает, что это должно работать. Хэш тела работает так, как ожидалось, но вычисляемая мной подпись — нет. Мне интересно, дефектен ли пример или я чего-то не понимаю в том, как он должен работать.
Закрытый ключ из Приложения C в RFC 6376
const string RSA_PRIVATE_KEY = @" -----BEGIN RSA PRIVATE KEY-----
MIICXwIBAAKBgQDwIRP/UC3SBsEmGqZ9ZJW3/DkMoGeLnQg1fWn7/zYtIxN2SnFC
jxOCKG9v3b4jYfcTNh5ijSsq631uBItLa7od+v/RtdC2UzJ1lWT947qR+Rcac2gb
to/NMqJ0fzfVjH4OuKhitdY9tf6mcwGjaNBcWToIMmPSPDdQPNUYckcQ2QIDAQAB
AoGBALmn+XwWk7akvkUlqb+dOxyLB9i5VBVfje89Teolwc9YJT36BGN/l4e0l6QX
/1//6DWUTB3KI6wFcm7TWJcxbS0tcKZX7FsJvUz1SbQnkS54DJck1EZO/BLa5ckJ
gAYIaqlA9C0ZwM6i58lLlPadX/rtHb7pWzeNcZHjKrjM461ZAkEA+itss2nRlmyO
n1/5yDyCluST4dQfO8kAB3toSEVc7DeFeDhnC1mZdjASZNvdHS4gbLIA1hUGEF9m
3hKsGUMMPwJBAPW5v/U+AWTADFCS22t72NUurgzeAbzb1HWMqO4y4+9Hpjk5wvL/
eVYizyuce3/fGke7aRYw/ADKygMJdW8H/OcCQQDz5OQb4j2QDpPZc0Nc4QlbvMsj
7p7otWRO5xRa6SzXqqV3+F0VpqvDmshEBkoCydaYwc2o6WQ5EBmExeV8124XAkEA
qZzGsIxVP+sEVRWZmW6KNFSdVUpk3qzK0Tz/WjQMe5z0UunY9Ax9/4PVhp/j61bf
eAYXunajbBSOLlx4D+TunwJBANkPI5S9iylsbLs6NkaMHV6k5ioHBBmgCak95JGX
GMot/L2x0IYyMLAz6oLWh2hm7zwtb0CgOrPo1ke44hFYnfc=
-----END RSA PRIVATE KEY-----";

Заголовки из примера сообщения и подписи в Приложении A, с заголовком подписи, включая хеш тела, добавленным к подписанным заголовкам, как описано в разделе 3.7
const string HEADERS = @"Received: from client1.football.example.com [192.0.2.1]
by submitserver.example.com with SUBMISSION;
Fri, 11 Jul 2003 21:01:54 -0700 (PDT)
From: Joe SixPack
To: Suzie Q
Subject: Is dinner ready?
Date: Fri, 11 Jul 2003 21:00:37 -0700 (PDT)
Message-ID:
DKIM-Signature: v=1; a=rsa-sha256; s=brisbane; d=example.com;
c=simple/simple; q=dns/txt; i=[email protected];
h=Received : From : To : Subject : Date : Message-ID;
bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
b=";

const string EXPECTED_SIGNATURE = "AuUoFEfDxTDkHlLXSZEpZj79LICEps6eda7W3deTVFOk4yAUoqOB4nujc7YopdG5dWLSdNg6xNAZpOPr+kHxt1IrE+NahM6L/LbvaHutKVdkLLkpVaVVQPzeRDI009SO2Il5Lu7rDNH6mZckBdrIx0orEtZV4bmp/YzhwvcubU4=";

И, наконец, рассматриваемая логика. Со временем, когда в структуру были добавлены различные криптографические функции, это стало намного более кратким, но я всегда получал одну и ту же неожиданную подпись.
var rsa = System.Security.Cryptography.RSA.Create();

rsa.ImportFromPem(RSA_PRIVATE_KEY);

var signature = rsa.SignData(Encoding.UTF8.GetBytes(HEADERS),
System.Security.Cryptography.HashAlgorithmName.SHA256,
System.Security.Cryptography.RSASignaturePadding.Pkcs1);

var signatureString = Convert.ToBase64String(signature);

Assert.Equal(EXPECTED_SIGNATURE, signatureString);

И как бы то ни было, вот что я рассчитал
PgpOeOGQgKDzYvwezymrJpa2KzjMkcOF86HaZNagCNuOwPMW67T+PgNfb1LyGeey07FsOhBQuQVUm36BFyvu8V3w6B/LYJITIfiC+GUA/C8/iJUTswSv9NOeZnjsebstqjI4LTuXRDqmQqex9TbW/8SA2rlZwegAyg0biKj75pg=

ОБНОВЛЕНИЕ:
По предложению @jstedfast я попробовал ту же логику с примером из RFC8463, который использует другую канонизацию и другой закрытый ключ. . Используя их, я получаю ожидаемую подпись из этого примера. Таким образом, первоначальный вопрос остается в силе.

F45dVWDfMbQDGHJFlXUNB2HKfbCeLRyhDXgFpEL8GwpsRe0IeIixNTe3DhCVlUrSjV4BwcVcOF6+FF3Zo9Rpo1t FOes9mPYQTnGdaSGsgeefOsk2JzdA+L10TeYt9BgDfQNZtKdN1WO//KgIqXP7OdEFE4LjFYNcUxZQ4FADY+8=

const string RFC8463_PRIVATE_KEY = @"-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDkHlOQoBTzWRiGs5V6NpP3idY6Wk08a5qhdR6wy5bdOKb2jLQi
Y/J16JYi0Qvx/byYzCNb3W91y3FutACDfzwQ/BC/e/8uBsCR+yz1Lxj+PL6lHvqM
KrM3rG4hstT5QjvHO9PzoxZyVYLzBfO2EeC3Ip3G+2kryOTIKT+l/K4w3QIDAQAB
AoGAH0cxOhFZDgzXWhDhnAJDw5s4roOXN4OhjiXa8W7Y3rhX3FJqmJSPuC8N9vQm
6SVbaLAE4SG5mLMueHlh4KXffEpuLEiNp9Ss3O4YfLiQpbRqE7Tm5SxKjvvQoZZe
zHorimOaChRL2it47iuWxzxSiRMv4c+j70GiWdxXnxe4UoECQQDzJB/0U58W7RZy
6enGVj2kWF732CoWFZWzi1FicudrBFoy63QwcowpoCazKtvZGMNlPWnC7x/6o8Gc
uSe0ga2xAkEA8C7PipPm1/1fTRQvj1o/dDmZp243044ZNyxjg+/OPN0oWCbXIGxy
WvmZbXriOWoSALJTjExEgraHEgnXssuk7QJBALl5ICsYMu6hMxO73gnfNayNgPxd
WFV6Z7ULnKyV7HSVYF0hgYOHjeYe9gaMtiJYoo0zGN+L3AAtNP9huqkWlzECQE1a
licIeVlo1e+qJ6Mgqr0Q7Aa7falZ448ccbSFYEPD6oFxiOl9Y9se9iYHZKKfIcst
o7DUw1/hz2Ck4N5JrgUCQQCyKveNvjzkkd8HjYs0SwM0fPjK16//5qDZ2UiDGnOe
uEzxBDAr518Z8VFbR41in3W4Y3yCDgQlLlcETrS+zYcL
-----END RSA PRIVATE KEY-----";

const string RFC8463_HEADERS = @"from:Joe SixPack
to:Suzie Q
subject:Is dinner ready?
date:Fri, 11 Jul 2003 21:00:37 -0700 (PDT)
message-id:
dkim-signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=football.example.com; [email protected]; q=dns/txt; s=test; t=1528637909; h=from : to : subject : date : message-id : from : subject : date; bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=; b=";



Подробнее здесь: https://stackoverflow.com/questions/790 ... 4871-valid
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Действителен ли пример DKIM в RFC 6376 (и RFC 4871)?
    Anonymous » » в форуме C#
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Действителен ли пример DKIM в RFC 6376 (и RFC 4871)?
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Обертка ключа AES с использованием другого ключа AES и развертывание для получения исходного ключа (RFC 3394 и RFC 5649)
    Гость » » в форуме JAVA
    0 Ответы
    174 Просмотры
    Последнее сообщение Гость
  • Подписание электронного письма дает dkim=neutral (хеш тела не проверен) при отправке через API Gmail от Google.
    Anonymous » » в форуме C#
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Как проверить подпись DKIM простого электронного письма, которое Yahoo не дает
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»