2015-09-25 6 views
0

Я хотел бы проверить подпись на открытом ключе эллиптической кривой, полученном с использованием ECDHE, но я не могу найти ссылку, в которой четко объясняются, какие байты подписаны.Как проверить открытый ключ ECDHE, подписанный RSA?

Я установил соединение TLS v1.2 с google.com с использованием набора шифров TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f). Я захватил трафик с Wireshark, и я могу видеть приветствия клиента, приветствия сервера, сертификата и сервера. Я понимаю, что открытый ключ ЕС, отправленный Google, подписан с использованием закрытого ключа сертификата Google (в данном случае RSA).

Вот сервер обмена ключами сообщение:

160303014d0c0001 490300174104f930

e65768e0587ec7e1 b8b537ccd6ae2500

3a364b84a68ed7c0 47d18dd104afb63c

cc72e800495db3cd d629807f0d4501a4

c043c5c7c52aea45 a66692aa11b60201

01007ec0b1ef4994 30f42f3ed9a7a592

92c0f875ad7cd2f8 5b36a7aec804f602

2959549a8a3d0e5c 5825fefa4d69f360

34eaad7138e5da69 61bdfb88ddb5172c

ba64071de0764fc1 c8b895dbc52ec85c

3b7891c53e6d843b 44f80c481a9beb86

c444b32204e9bc6c 6665e6dd26887c5e

fc4e331fbdd66536 686b6b5f16072b52

ee2fee75ca65e28f a0ee0644b91fba30

783798aa83cf28f1 394b1344b43104cb

89aed55030bd7561 d13ae20d4d7bc17e

682e6c6266f04bf6 31665a547e2f15b3

c79fda548a781d39 5d64f4eea75aac96

9374ce60400fdc11 3a3d5a98b62f63b7

6e5324797c938f39 bc1cc5736b612bd7

7a1bc790841d4e25 dae648cab33273e2

588c

Синтаксический это дает:

160303014d - запись заголовка

0C - сервер ключей excha Нге сообщение

000149 - длина сообщения

03 - под названием кривой

0017 - secp256r1 кривой

41 - длина открытого ключа

04 - не уверен, что это означает

f930e6 ...04af [32 байта] - значение х открытых ключей

b63ccc ... 11b6 [32 байта] - у значение открытого ключа

02 - SHA-1 хэш

01 - RSA подписи

0100 - длина подписи

7ec0b1 ... 588c [256 байт] - значение подписи

Использование сертификата, которое я получил в сообщении сертификат, я был в состоянии т o выполнить операцию открытого ключа подписи открытого ключа ЕС, и он выглядит как правильно проложенный хэш SHA-1. Однако я не могу проверить это значение хэш-функции. Я пробовал много разных комбинаций открытого открытого ключа ЕС с его заголовками, но ничего не пробовал правильно.

Вот как я извлек хэш:

OpenSSL rsautl -inkey ~/googlePubKey.pem -encrypt -в ~/googleECpubkeysig -pubin -raw | HexDump

0000000 0100 FFFF FFFF FFFF FFFF FFFF FFFF FFFF

0000010 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF

*

00000d0 FFFF FFFF FFFF FFFF FFFF FFFF 3000 3021

00000e0 0609 2b05 030e 1a02 0005 1404 3ac5 fb13

00000f0 9ff8 77f1 6a69 09af 472a 90b2 cac6 b4f8

Последние 20 байт выглядят как SHA-1 хэш, который является алгоритм, указанный в подписи. Какие байты из Exchange Server Exchange я должен быть хешированием, чтобы получить это значение? Или есть некоторые преобразования или другие данные, которые я должен выполнить или добавить до хэширования?

+0

Его указано в rfc 5246, разделы 4.7 и в RFC 4492, раздел 5.4. Слишком плохо, что в этих RFC нет примеров работы, это всегда ошибка, на мой взгляд. –

ответ

1

Мне не хватало случайного случайного и случайного сервера. Спасибо JamesKPolk за ссылки и этот связанный пост за упоминание двух случайных значений в одном из комментариев: https://security.stackexchange.com/questions/80619/tls-1-2-handshake-how-is-the-ecdhe-public-key-signed-by-server.

полное значение хеша-функции для моего примера выше (с шестнадцатеричными значениями в скобках) составляет:

client_random (32 байта) + server_random (32 байта) + named_curve (0x03) + secp256r1_curve (0x0017) + length_of_public_key (0x41) + first_byte_of_key (0x04) + key_x_value + key_y_value

Когда я использовал это значение, хэш совпадал, и подпись была подтверждена ОК.

Смежные вопросы