22.02.2007 10:51:26Генерация сессионного ключа Ответов: 12
Владимир
Мне необходимо получать сессионный ключ на основе ключевой пары, хранящейся на сменном носителе, таким образом, чтобы гарантированно расшифровывать данные, зашифрованные сессионным ключом, полученным тем же самым способом, но сколько угодно раз ранее. Может не ясно выразился - поясню: берем носитель, получаем из него симметричный ключ, шифруем данные, выключаем машину. Проходит год, берём носитель, получаем из него симметричный ключ, расшифровываем данные. Как это устроить? Ключ, возвращаемый DeriveKey создаётся на основе Hash, а как в Hash-е получить одну и ту же строку от ключевой пары, и как бороться с разными значениями синхровектора?
 
Ответы:
22.02.2007 11:40:45Kirill Sobolev
Можно воспользоваться алгоритмом ДХ, процесс станет чуть сложнее.
После шифрования данных симметричным ключем:
1)Генерите эфемеральную ключевую пару.
2)С помощью секретного ключа эфмеральной пары и ОК из носителя делате ключ обмена.
3)На ключе обмена шифруете сессионный ключ.
4)К зашифрованным данным добавляете эфемеральный ОК шифрованный сессионный ключ.
Через год:
1) При помощи секретного ключа из носителя и сохраненного эфемерального ОК получаете ключ обмена
2) Расшифровываете сохраненный сессионный ключ
3) Расшифровываете данные.
22.02.2007 12:12:18Владимир
Слишком долгая процедура!!!!!
Необходим как можно более быстрый путь. Шифруются короткие строки данных - около 40 байт, но их будет огромное количество. Поэтому при шифрации/дешифрации должно производиться только симметричное шифрование. Вот сам симметричный ключ можно получать сколько угодно долго.
22.02.2007 12:46:03Kirill Sobolev
Вы невнимательно прочитали ответ.
Шифрование остается симметричным, а то, что я написал и надо включить в процедуру генерации симметричного ключа, который можно получать сколь угодно долго.
22.02.2007 12:52:01Владимир
Может я и невнимательно читаю, но Вы написали "К зашифрованным данным добавляете эфемеральный ОК шифрованный сессионный ключ.", то есть ключ лежит внутри зашифрованных данных и чтобы достать расшифрованные данные, надо прежде из этой смеси вытащить сессионный ключ, а уж потом получатся данные! Самый первый шаг получается надо повторять для каждой порции данных, что недопустимо! Извиняюсь, если показался Вам тупым.
22.02.2007 13:05:29Kirill Sobolev
А так Вы будете "сколь угодно долго" генерить сессионный ключ из пары для каждой порции данных - какая разница?
22.02.2007 15:15:19Владимир
Разница в том, что я один раз из ключевой пары получил сессионный ключ, а потом любое количество данных им расшифровываю
22.02.2007 16:02:26Kirill Sobolev
Так я тоже самое предложил - только сессионный ключ получаете из 2х пар, реальной и эфемеральной, а потом расшифровываете/зашифровываете любое количество данных.
22.02.2007 16:21:07Владимир
Из Вашего ответа неясно где хранится зашифрованный сессионный ключ между моментами необходимости иметь его в расшифрованном виде! Я предположил, что вместе с зашифрованными данными, и этот вариант меня категорически неустраивает.
22.02.2007 16:36:50Kirill Sobolev
Да, вместе с данными.
Почему не устравивает?
22.02.2007 16:43:59Владимир
Как я уже писал именно потому, что при этом нужно каждый раз при расшифровке маленькой строчки сначала расшифровывать сессионный ключ, что является очень дорогостоящей процедурой и приходится делать две операции на расшифрование одной строки в 40 символов.
22.02.2007 16:49:08Владимир
Извините Кирилл, если у нас завязалась такая беседа, что у меня создаётся ощущение, будто мы разговариваем о совершенно разных проблемах, может нам можно перейти в аську? Мне будет проще поточнее сформулировать свою проблему, если ответы будут приходить чаще! Мой номер в аське 287929515
22.02.2007 17:30:17Kirill Sobolev
Если сессионный ключ общий для всех строчек - то и расшифровывать его надо 1 раз перед расшифровкой всех строчек.