Шифрование RC4 - как разнообразить ключ
День добрый!
Подскажите, пожалуйста.
Есть Delphi, Postgres и CryptoAPI (XP или Windows 7)
Надо сделать шифрование персональных данных в базе, текстовой информации и не больших графических файлов. (По всем доступным источникам использовать ГОСТ-89 не обязательно, да сейчас и не в этом вопрос)
По ряду причин желательно использовать симметричное поточное шифрование RC4. В принципе, в Delphi через wcrypt2 все работает.
Однако, классики утверждают, что если два в чем-то отличных сообщения зашифровать одним ключом, что они вскрываются элементарно. Ни длина ключа, ни что иное не имеет значения...
Что можно сделать?
1. Манипуляции с паролем, на основании которого CryptoAPI создает ключ. А что если пароль разделить на две части? Постояннная, секретная, например в виде GUID и хранимая на флешке (чтоб не запоминать, флешка будет по-совместительству играть роль ключа, разумеется, ее надо беречь). И вторая часть, тот же GUID, не секретный, формируемый для каждой записи в БД и хранимый там же. Какие принципиальные недостатки у этого метода, сильно ли страдает защита?
2. Манипуляции с созданным ключом с помощью вызова CryptSetKeyParam, с параметрами KP_SALT или KP_IV (солт или вектор инициализации) Тут не понятно. По-идее, начиная с XP ключ уже не 40, а всегда 128 бит, даже при вызове провайдера PROV_RSA_FULL ?
Какая разница между KP_SALT и KP_IV?
Значит ли их использование, что просто часть из разрешенных 128 бит заменяется на соответсвующий не секретный параметр (который можно поместить в запись БД) из CryptSetKeyParam ?
|