Передача RSA public key через сокет
От: Srv  
Дата: 10.03.16 09:02
Оценка:
Всем привет!

Есть свой протокол UDP based, хочу через него передавать RSA public key + кое какая инфа подписанная RSA private key. RSA public key будет передаваться в der формате. вот его дамп

10/03/16 14:46:23: Dump:  00000000 : 30 82 01 0A 02 82 01 01 00 AD 4A FC 98 D1 53 2F   |  0.........J...S/
10/03/16 14:46:23: Dump:  00000010 : 80 68 12 5F D0 E7 93 87 45 EE 54 26 8B 5A EA 1B   |  .h._....E.T&.Z..
10/03/16 14:46:23: Dump:  00000020 : BF 54 75 C5 AE 96 DC F2 4E 02 5A C2 41 86 66 99   |  .Tu.....N.Z.A.f.
10/03/16 14:46:23: Dump:  00000030 : C3 B9 97 38 7F 8F EC 48 E0 89 7B 86 E6 60 77 5E   |  ...8...H..{..`w^
10/03/16 14:46:23: Dump:  00000040 : E1 D0 79 A7 CC F5 66 AA 63 0B 19 E7 C0 10 CB 76   |  ..y...f.c......v
10/03/16 14:46:23: Dump:  00000050 : 1A 5C 78 E3 8D 39 6F 47 5B 92 29 E2 E2 AB 71 0B   |  .\x..9oG[.)...q.
10/03/16 14:46:23: Dump:  00000060 : 4A 6B 59 E9 C2 84 7F 06 E3 A0 7B A7 4B B7 CB 23   |  JkY.......{.K..#
10/03/16 14:46:23: Dump:  00000070 : 39 D2 B8 E1 C5 78 60 09 29 77 25 41 97 91 2A 4C   |  9....x`.)w%A..*L
10/03/16 14:46:23: Dump:  00000080 : 91 0B E8 44 C0 56 BE F1 F9 A0 7C 61 3D 39 B3 41   |  ...D.V....|a=9.A
10/03/16 14:46:23: Dump:  00000090 : 02 0B 37 AC 71 C0 7E 59 9A A5 18 85 10 2F 2B 52   |  ..7.q.~Y...../+R
10/03/16 14:46:23: Dump:  000000A0 : EC FB 98 53 C2 50 D3 FC DB 21 07 4B 78 A2 DE 54   |  ...S.P...!.Kx..T
10/03/16 14:46:23: Dump:  000000B0 : 92 61 E7 A7 B7 14 DB F5 95 A6 A5 95 0A F6 25 28   |  .a............%(
10/03/16 14:46:23: Dump:  000000C0 : E3 69 21 63 7D 44 D4 F2 71 C9 0A BC 34 0F 0C A5   |  .i!c}D..q...4...
10/03/16 14:46:23: Dump:  000000D0 : 23 FD 77 C4 77 18 89 04 AC BA 16 11 14 44 9A B1   |  #.w.w........D..
10/03/16 14:46:23: Dump:  000000E0 : 08 07 8B 64 56 C6 CC 75 BC F7 D3 AB D4 88 A7 8E   |  ...dV..u........
10/03/16 14:46:23: Dump:  000000F0 : D7 72 CB 1F 27 D0 B5 58 2D AE 8C B9 9B B0 2B B7   |  .r..'..X-.....+.
10/03/16 14:46:23: Dump:  00000100 : 66 4F 89 42 85 90 96 84 4D 02 03 01 00 01         |  fO.B....M.....

Канал передачи данных, по которому передается ключ, не шифрованный. Вопрос: это нормально вообще передавать в таком формате RSA public key? Я имею ввиду сам DER формат, заголовок + то что в конце стоит public exponent (это не секюрная ведь инфа экспонента)? Или все таки надо извлечь из DER 2048 bit RSA public key и передавать только его? Если надо извлечь ключ из DER то делает ли это OpenSSL, т.к я нашел тока DER

Спасибо!
Re: Передача RSA public key через сокет
От: smeeld  
Дата: 10.03.16 09:07
Оценка: +1
Здравствуйте, Srv, Вы писали:

Srv> Вопрос: это нормально вообще передавать в таком формате RSA public key?


Публичный можно передавать как угодно и кому угодно. На то он и публичный. Хотя, лучше оборачивать его в один из стандартных форматов и передавать соответствующим файлом. Правило хорошего тона.
Re[2]: Передача RSA public key через сокет
От: Srv  
Дата: 10.03.16 09:15
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Здравствуйте, Srv, Вы писали:


Srv>> Вопрос: это нормально вообще передавать в таком формате RSA public key?


S>Публичный можно передавать как угодно и кому угодно. На то он и публичный. Хотя, лучше оборачивать его в один из стандартных форматов и передавать соответствующим файлом. Правило хорошего тона.


Спасибо за ответ )
Да про файлы знаю, но у меня еще стоит задача сэкономить payload внутри пакета. Вот и не пойму стоит извлекать DER или нет. Если его извлекать то парсер видимо придется свой прикручивать.
Re[3]: Передача RSA public key через сокет
От: smeeld  
Дата: 10.03.16 09:34
Оценка:
Здравствуйте, Srv, Вы писали:

Вот и не пойму стоит извлекать DER или нет. Если его извлекать то парсер видимо придется свой прикручивать.

Потрошить DER чтоб сэкономить пару байт для payload? Чем Вы там занимаетесь?
Re[4]: Передача RSA public key через сокет
От: Srv  
Дата: 10.03.16 09:41
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Здравствуйте, Srv, Вы писали:


S> Вот и не пойму стоит извлекать DER или нет. Если его извлекать то парсер видимо придется свой прикручивать.


S>Потрошить DER чтоб сэкономить пару байт для payload? Чем Вы там занимаетесь?

Открою еще один секрет, это UDP discovery пакет, который посылается раз в 5 секунд, общая длина выходит 570 байт, не охото сильно нагружать сеть.
Re: Передача RSA public key через сокет
От: vsb Казахстан  
Дата: 10.03.16 09:49
Оценка: +1
Возможно стоит передавать подписанные сообщения + хеш ключа (или любой идентификатор). Какой вам смысл передавать открытый ключ? Открытый ключ у получающей стороны и так должен быть, иначе как она проверит, что это нужный ключ?
Re[5]: Передача RSA public key через сокет
От: smeeld  
Дата: 10.03.16 09:51
Оценка:
Здравствуйте, Srv, Вы писали:


Srv>Открою еще один секрет, это UDP discovery пакет, который посылается раз в 5 секунд, общая длина выходит 570 байт, не охото сильно нагружать сеть.


Как понял Вы хотите потрошить DER, чтоб отправлять только его Contents? Если так, то сколько там байт сэкономить удасться? Два, может три-четрые. Не густо. К тому же 570B сейчас вообще ни о чём не только раз в пять секунд, но в доли секунды. На современных сетях. Или у Вас там что-то древнее?
Re[6]: Передача RSA public key через сокет
От: Srv  
Дата: 10.03.16 09:59
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Здравствуйте, Srv, Вы писали:



Srv>>Открою еще один секрет, это UDP discovery пакет, который посылается раз в 5 секунд, общая длина выходит 570 байт, не охото сильно нагружать сеть.


S>Как понял Вы хотите потрошить DER, чтоб отправлять только его Contents? Если так, то сколько там байт сэкономить удасться? Два, может три-четрые. Не густо. К тому же 570B сейчас вообще ни о чём не только раз в пять секунд, но в доли секунды. На современных сетях. Или у Вас там что-то древнее?


Спасибо за интерес )
У нас обычный WiFi в нем UDP broadcast discovery с этим вот пакетом в 570 байт. Да хотелось бы отправлять DER Contents, но целесообразно ли это? Экономится 14 байт.
Само собой разумеется что клиентов с этим UDP broadcast discovery в одной сети может быть много, ну скажем до 100.
Re[7]: Передача RSA public key через сокет
От: smeeld  
Дата: 10.03.16 10:07
Оценка:
Здравствуйте, Srv, Вы писали:

>Экономится 14 байт.


Откуда 14B? Там identifier-1B, и length 2-4 B в definite form для размера ключа.
Отредактировано 10.03.2016 10:11 smeeld . Предыдущая версия .
Re[8]: Передача RSA public key через сокет
От: Srv  
Дата: 10.03.16 10:10
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Здравствуйте, Srv, Вы писали:


>>Экономится 14 байт.


S>Откуда 14B? Там identifier-1B, и lenght 2-4 B в definite form для размера ключа.

Собственно сам ключ 2048 бит (256 байт), на сколько я понимаю остальное это DER. На выходе 270 байт DER.
Re[9]: Передача RSA public key через сокет
От: Srv  
Дата: 10.03.16 10:11
Оценка:
Здравствуйте, Srv, Вы писали:

Srv>Здравствуйте, smeeld, Вы писали:


S>>Здравствуйте, Srv, Вы писали:


>>>Экономится 14 байт.


S>>Откуда 14B? Там identifier-1B, и lenght 2-4 B в definite form для размера ключа.

Srv>Собственно сам ключ 2048 бит (256 байт), на сколько я понимаю остальное это DER. На выходе 270 байт DER. Длина ключа у меня будет постоянной.
Re[5]: Передача RSA public key через сокет
От: Mr.Delphist  
Дата: 10.03.16 15:11
Оценка:
Здравствуйте, Srv, Вы писали:

Srv>Открою еще один секрет, это UDP discovery пакет, который посылается раз в 5 секунд


Зачем так часто? Неужели окружение сети меняется столь стремительно?
Представьте хотя бы сотню-другую таких клиентов, орущих в сеть каждые 5 секунд — Вы действительно хотите весь этот трафик? Тот же UPnP discovery происходит куда реже.
Re[6]: Передача RSA public key через сокет
От: Srv  
Дата: 10.03.16 16:46
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Здравствуйте, Srv, Вы писали:


Srv>>Открою еще один секрет, это UDP discovery пакет, который посылается раз в 5 секунд


MD>Зачем так часто? Неужели окружение сети меняется столь стремительно?

MD>Представьте хотя бы сотню-другую таких клиентов, орущих в сеть каждые 5 секунд — Вы действительно хотите весь этот трафик? Тот же UPnP discovery происходит куда реже.

Дак вот я и думаю как бы пооптимизировать тут... 5 секунд это не так часто. Задача стоит чтобы как можно быстрее обнаружить друг друга.
Re: Передача RSA public key через сокет
От: Pzz Россия https://github.com/alexpevzner
Дата: 10.03.16 16:58
Оценка: +1
Srv>Канал передачи данных, по которому передается ключ, не шифрованный. Вопрос: это нормально вообще передавать в таком формате RSA public key? Я имею ввиду сам DER формат, заголовок + то что в конце стоит public exponent (это не секюрная ведь инфа экспонента)? Или все таки надо извлечь из DER 2048 bit RSA public key и передавать только его? Если надо извлечь ключ из DER то делает ли это OpenSSL, т.к я нашел тока DER

Нормально было бы передавать весь сертификат целиком, он кроме публичного ключа содержит и всякую другую полезную информацию (типа, кем выдан, кому выдан и т.п.). Причем подписана в нем вся эта информация, а не только публичный ключ.

Только более-менее секурные RSA сертификаты довольно большие, в один UDP пакет могут и не полезть. Я бы посоветовал посмотреть на Elliptic Curves (ECDSA, если мы говорим именно о сертификатах для подписи). Они гораздо компактнее, чем RSA-сертификаты той же степени защищенности. И при этом многие операции с ними выполнаются в разы быстрее. OpenSSL их умеет.

Еще бы я посоветовал не выпендриваться со своим протоколом, а взять DTLS. Потому что если вы не знаете, чти такое public exponent, это говорит о вашем низком уровне криптографической образованности. А это значит, что вы наделаете СТОЛЬКО ошибок, что с точки зрения криптоаналитика ваш протокол мало чем будет отличаться от передачи данных открытын текстом и без подписи.
Re[5]: Передача RSA public key через сокет
От: Pzz Россия https://github.com/alexpevzner
Дата: 10.03.16 17:01
Оценка:
Здравствуйте, Srv, Вы писали:

Srv>Открою еще один секрет, это UDP discovery пакет, который посылается раз в 5 секунд, общая длина выходит 570 байт, не охото сильно нагружать сеть.


Сети более-менее все равно, какого размера пакет вы посылаете в пределах MTU. Но вот более-менее защищенный (с числом бит хотя бы 2048) RSA сертификат вы в 570 байт не впихнете.
Re[7]: Передача RSA public key через сокет
От: Pzz Россия https://github.com/alexpevzner
Дата: 10.03.16 17:03
Оценка:
Здравствуйте, Srv, Вы писали:

Srv>У нас обычный WiFi в нем UDP broadcast discovery с этим вот пакетом в 570 байт. Да хотелось бы отправлять DER Contents, но целесообразно ли это? Экономится 14 байт.

Srv>Само собой разумеется что клиентов с этим UDP broadcast discovery в одной сети может быть много, ну скажем до 100.

У вас точка доступа струячит какого-то сравнимого размера пакеты 10 раз в секунду. Beacons называются. Не берите в голову.
Re[6]: Передача RSA public key через сокет
От: Pzz Россия https://github.com/alexpevzner
Дата: 10.03.16 17:06
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Зачем так часто? Неужели окружение сети меняется столь стремительно?

MD>Представьте хотя бы сотню-другую таких клиентов, орущих в сеть каждые 5 секунд — Вы действительно хотите весь этот трафик? Тот же UPnP discovery происходит куда реже.

Но он и думает очень долго. А сотня-другая клиентов в wifi сети вокруг одной точки доступа вряд ли уживется.
Re[2]: Передача RSA public key через сокет
От: Srv  
Дата: 10.03.16 17:14
Оценка:
Здравствуйте, Pzz, Вы писали:

Srv>>Канал передачи данных, по которому передается ключ, не шифрованный. Вопрос: это нормально вообще передавать в таком формате RSA public key? Я имею ввиду сам DER формат, заголовок + то что в конце стоит public exponent (это не секюрная ведь инфа экспонента)? Или все таки надо извлечь из DER 2048 bit RSA public key и передавать только его? Если надо извлечь ключ из DER то делает ли это OpenSSL, т.к я нашел тока DER


Pzz>Нормально было бы передавать весь сертификат целиком, он кроме публичного ключа содержит и всякую другую полезную информацию (типа, кем выдан, кому выдан и т.п.). Причем подписана в нем вся эта информация, а не только публичный ключ.


Pzz>Только более-менее секурные RSA сертификаты довольно большие, в один UDP пакет могут и не полезть. Я бы посоветовал посмотреть на Elliptic Curves (ECDSA, если мы говорим именно о сертификатах для подписи). Они гораздо компактнее, чем RSA-сертификаты той же степени защищенности. И при этом многие операции с ними выполнаются в разы быстрее. OpenSSL их умеет.


Pzz>Еще бы я посоветовал не выпендриваться со своим протоколом, а взять DTLS. Потому что если вы не знаете, чти такое public exponent, это говорит о вашем низком уровне криптографической образованности. А это значит, что вы наделаете СТОЛЬКО ошибок, что с точки зрения криптоаналитика ваш протокол мало чем будет отличаться от передачи данных открытын текстом и без подписи.


Спасибо за ответ.
Да в криптографии не так давно, каюсь. DTLS все хочу посмотреть, но не было время, теперь обязательно загляну. Если честно то я не совсем понимаю какие можно наделать ошибки в схеме: передача Public Key от клиента0 к клиенту1, затем энкрипшен этим Public Key у клиента1, передача пакета обратно клиенту0 и расшифровка пакета через Private key. Естественно всякие challenge и прочие штучки с передачей только hash, а не самого значения я учел.
Re[8]: Передача RSA public key через сокет
От: Srv  
Дата: 10.03.16 17:17
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, Srv, Вы писали:


Srv>>У нас обычный WiFi в нем UDP broadcast discovery с этим вот пакетом в 570 байт. Да хотелось бы отправлять DER Contents, но целесообразно ли это? Экономится 14 байт.

Srv>>Само собой разумеется что клиентов с этим UDP broadcast discovery в одной сети может быть много, ну скажем до 100.

Pzz>У вас точка доступа струячит какого-то сравнимого размера пакеты 10 раз в секунду. Beacons называются. Не берите в голову.

Размер beacon не сильно помню, приходилось переписывать madwifi драйвера )
Re[6]: Передача RSA public key через сокет
От: SkyDance Земля  
Дата: 10.03.16 21:50
Оценка:
Pzz>Сети более-менее все равно, какого размера пакет вы посылаете в пределах MTU.

Wi-Fi сети — нет, не все равно.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.