Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Нужен совет по ассиметрии, плиз! 08.01.02 18:05 Число просмотров: 1632
Автор: Artik Статус: Незарегистрированный пользователь
|
> мне тож так кажется. защиту от "гостей" все равно придется > делать на уровне разграничения доступа. Ты все равно будешь > раздавать людям ключи, так какая разница по сколько штук их > выдавать? > если "гость" захватит ключи Юзера, ессна он захватит сразу > два, то же самое и Админом. А если не видно разницы, зачем > плодить больше?
Я хотел сделать так: Админ знает 2 ключа, Юзер -1, Гость - 0. Админ может и читать и изменять данные, Юзер только читать, Гость - ничего не может. Для этого и нужно два ключа.
> но если у тебя большие блоки данных, которые шифруются, то > для простоты реализации, возможно и симметричным шифром > проще будет их укатывать, тогда твоя схема имеет смысл... > Только с помощью RSA тебе надо шифровать не блок, а ключ > симметричного шифра AES, которым ты шифруешь блок. И ключ > AES нигде хранить не надо. Плюс, данная схема позволяет > раздавать РАЗНЫМ людям доступ на ОДНИ И ТЕ ЖЕ зашифрованные > данные.
Дело в том, что если шифровать с помощью RSA ключ AES, то не получиться разграничить доступ по чтению и изменению данных, в чем собственно и задача. Так, получив один раз открытый ключ AES можно им тут же и читать и писать.
С тех пор как исходное сообщение написал - сам немножко поразмыслил:
Первичная схема, предложенная мной, плоха минимум по 3 причинам:
1) Не годится для мало-мальски серьезных по объему блоков данных - RSA слишком медленный для шифрования целого блока данных.
2) Ни к чему использовать для RSA и AES один и тот же ключ, это может быть небезопасным.
3) При изменении данных с неверным ключом записи (скажем Юзером) данные попросту испортятся, а Админ не сможет определить (в общем случае) этот факт.
Предлагаю новую схему :-)
Зашифрование:
1) signature=RSAencrypt(hash(block),WriteKey)
// Т.е. к блоку дописывается подпись - хэш, зашифрованный ключом записи
2) {block,signature}=AESencrypt({block,signature},AccessKey)
// Блок данных с подписью шифруются AES'ом с ключом доступа
Расшифрование:
1) {block,signature}=AESdecrypt({block,signature},AccessKey)
// Данные уже расшифрованы, следующей операцией проверим подпись,
// что бы убедиться, в правомерности записанной информации
2) if RSAdecrypt(signature,ReadKey)=hash(block) then OK
// Расшифровываем подпись, вычисляем хэш блока и сравниваем их
// Если они равны, то все ОК, если нет, то данные изменил тот, кто
// не имел на это право (Юзер)
Таким образом в схеме работает 3 ключа:
AccessKey - ключ для доступа к данным
ReadKey - для проверки валидности данных
WriteKey для санкционированного изменения данных
Админ знает все три ключа, Юзер знает AccessKey и ReadKey, Гость ни знает ничего. Введем еще Юзера2, который тоже знает AccessKey и ReadKey.
Админ может читать данные, проверять их валидность и санкционированно изменять данные. Юзер и Юзер2 могут читать и проврять данные на валидность, но не могут санкционированно изменять данные. Если вдруг Юзер изменит данные, Админ и Юзер2 смогут обнаружить этот факт и забить тревогу. Гость не может делать ничего.
Большое спасибо, всем кто ответил на мое сообщение и дочитал все это до конца ;)
С удовольствием приму любые комментарии.
Заранее благодарен,
С уважением, Artik.
|
|
|