Как получить модуль и экспоненту из открытого ключа для проверки подписи?

Я подписал строку test используя открытый ключ.

Я получил информацию из открытого ключа, такую ​​как имя владельца, идентификатор ключа и отпечаток пальца и сам открытый ключ.

Сейчас я пытаюсь проверить подпись.

Я получаю правильную структуру для подписи v4, начиная с 137 …

http://senderek.ie/research/security/key-experiments.html

$signature="iQIcBAEBCAAGBQJWSZmTAAoJENJgM+p1pSbP7xoQAKStiaQlKrltTKGzfVVLw3nE
bKkEkb7Wn2wCIOUSov2ACvgDYtnUelt9K6iSY4OcpetVU0UQi1xKuLbZWgoXs6R6
0rGUBitp5zaHtwthMciUPW9LMjPx+lLtrDdJt/PGZXqBLVlWSITzJsI4PLZ1JL5j
xopZYSioK/Rji6WHDW6JaYuwPnbO5xH6trv5g03vE1GFUfAw+TpLGJYiUGkaRoD5
sLOR7R+digOJA4MDcnq5wTyf4tit+fG8HuqUUITyQ/fQ5R8zeN2sj8ZhIKLMXV5G
DOtV7L1iYQazL3orYXIABWxY80+j2+e265d9UGxthij6nxcEdf/uIRUxD3gZhvXV
SXziv0lTmKnSElK52oW+JPXbLhZ3qxhBf0zWBHtRAo3zKdS506UEQlyGK7HILvzh
4jLjsaLrcjbAxUiG4wdNjgGAaFnW0lSjUvFqeRE2UqLRMTRKdjZ3jFjo/xmTrhXV
+VkX7KWWf5cmUBycvdR6q+UvQi6ADx+nDXtOXHz6gQ3cLpsuUVf6GZXmoPpZV1nk
Uk5Cp0i8LlXFlQjdYjSbhAuipxXOdvdN3sCMuAXIWdfAfqbm2tYhV9/7qjrllx/M
Ecj2Tw27rpVCXuZe6dJfVnDZLqaWup7EgnAYo9/RGGPc+J5H9yiClc3ewOMDSElN
SnsNN+bQxBa9TNMzrD6w
=8Y2I";

$s =  base64_decode($signature);
$sa = str_split($s);
$subpacket_data=0;
$data='';
$subpacket_data_un=0;
for($i = 0; $i < strlen($s);) {
ord($sa[$i++]);

if($i==3)$version=ord($sa[$i]);
if($i==4)$sig_type=ord($sa[$i]);
if($i==5)$key_alg=ord($sa[$i]);
if($i==6)$hash_alg=ord($sa[$i]);
if($i==7)$subpacket_data=ord($sa[$i])<<8;
if($i==8)$subpacket_data+=ord($sa[$i]);
if($i==8+$subpacket_data+1)$subpacket_data_un=ord($sa[$i])<<8;
if($i==8+$subpacket_data+2)$subpacket_data_un+=ord($sa[$i]);
if($i==8+$subpacket_data_un+1)$left_bit=ord($sa[$i])<<8;
if($i==8+$subpacket_data_un+2)$left_bit_2=ord($sa[$i]);


}

$subpacket_data_raw=ord($sa[9])<<40;
$subpacket_data_raw.=ord($sa[10])<<32;
$subpacket_data_raw.=ord($sa[11])<<24;
$subpacket_data_raw.=ord($sa[12])<<16;
$subpacket_data_raw.=ord($sa[13])<<8;
$subpacket_data_raw.=ord($sa[14]);


$signing_string="test". $version . $sig_type . $key_alg. $hash_alg . $subpacket_data . $subpacket_data_raw);

Но что дальше? Где и какие значения мне нужны из открытого ключа для алгоритма подписи?

http://tools.ietf.org/html/rfc4880#section-2.2
http://tools.ietf.org/html/rfc4880#section-5.2.3
http://tools.ietf.org/html/rfc4880#section-5.2.4

Все подписи формируются путем создания хеша над подписью
данные, а затем, используя полученный хэш в алгоритме подписи.

Обнаружен алгоритм подписи RSA.

Так что теоретически мне просто нужны входные параметры для какой-нибудь RSA-функции? Но где они хранятся?

Код является лишь примером, и я просто использую его для тестирования, я знаю, что могу и должен изменить некоторые строки.

У меня есть эти пакеты открытого ключа:

0) int(153) = Tag
1) int(2) = H Length
2) int(13) = L Length
3) int(4) = Version
4) int(85) = Creation Time (<<24) +
5) int(12) = Creation Time (<<16) +
6) int(54)  = Creation Time (<<8) +
7) int(60)  = Creation Time
8) int(1) = PK algorithm
9) int(16) = MPI Modulus n (<<8?)
10) int(0) = MPI Modulus n

это правильно? Что мне делать со следующими пакетами? Сколько пакетов мне нужно для номера модуля MPI n?

Multi-Precision-Integer — это очень длинное число с длиной в
биты хранятся в первых двух байтах, за которыми следуют все биты, которые делают
до всего номера.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector