Соль в криптографии @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 8 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
AlexShop Муж.
участник
34
Сообщения: 1866
Зарегистрирован: 17.02.04
Заголовок сообщения: Соль в криптографии
Сообщение Добавлено: 27 Февраль 2008, 07:28:31 
Хочу выяснить что такое "соль" в криптографии. Я понимаю это так:

Допустим есть алгоритм который шифрует имена и выдает следущие результаты:
Петя -> qwert
Маша -> yuiop
Вася -> asdfg

Проблема в том, что если список имен содержит несколько имен "Петя", то программа их зашифрует одинакого:
Петя -> qwert
Петя -> qwert
Петя -> qwert

Что бы избежать такого одинакого результата можно добавить случайные буквы в начале имен (по 4 буквы вначале слова):
йцукПетя
енгшПетя
ячсмПетя

Так как теперь имена различаются друг от друга, то шифровальный алгоритм выдаст различные результаты:
йцукПетя -> fghfhvps
енгшПетя -> opjercjf
ячсмПетя -> xidmsarj

Теперь злоумышленник не будет знать что за каждым кодом, зашифрованно одно и тоже имя.
А нам (после расшифровки) надо отбросить первые 4 буквы что бы получить искомое имя.

Эти 4 случайные буквы и называются "соль" в криптографии.
Все правильно, ничего не напутал?

_________________
Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
fStrange Муж.
соучастник
10
Сообщения: 900
Зарегистрирован: 25.07.05
Откуда: Ростов-на-Дону
Сообщение Добавлено: 27 Февраль 2008, 08:10:26 
SALT (или так называемая "привязка") в основном используется для того. чтобы пользователи, использущие одинаковые пароли, имели различные хэши. Как правило, SALT - это строка из 4...8 случайных символов, которая дополнительно используется для хэширования паролей пользователей и сохраняется вместе с финальным хэшем (как, к примеру, сделано в MD5 (Unix)-хэшах) или же хранится отдельно от хэша.

_________________
Записки мобильного веб разработчика
diezel2005 Муж.
новый человек
16
Сообщения: 140
Зарегистрирован: 12.08.06
Откуда: Украина
Сообщение Добавлено: 27 Февраль 2008, 13:07:21 
fStrange,
Дело в том, что хэширование - это односторонний процесс, а AlexShop, я так понимаю, хочет расшифровывать данные. В этом случае тоже применяется этот SALT?

_________________
Не можешь вынести хамства? Сосчитай до десяти и вынеси хама.
siddhartha Муж.
постоянный участник
100
Сообщения: 4210
Зарегистрирован: 14.01.05
Откуда: Moscow
Сообщение Добавлено: 27 Февраль 2008, 13:16:44 
AlexShop, всё верно

_________________
Electronic Arts Russia überdesigner
Алефъ Муж.
постоянный участник
20
Сообщения: 2579
Зарегистрирован: 07.08.07
Сообщение Добавлено: 27 Февраль 2008, 14:35:56 
Маша и Вася имеют одинаковые буквы а - ну и в первом примере как это отражено?
Т.е. чтобы чета закодировать, код должен быть избыточным относительно исходного.
В данном примере в слове можно спрятать букву, в предложении - слово, добавление дополнительных условий - не обязательно 4х символов в начало и есть "соль".
AlexShop Муж.
участник
34
Сообщения: 1866
Зарегистрирован: 17.02.04
Сообщение Добавлено: 28 Февраль 2008, 03:23:54 
С двухсторонним шифрованием вроде все понятно: "Соль" спрятана в зашифрованном виде.
С односторонним тоже надеюсь понятно: "Соль" может лежать открыто в базе.

Вот например результат хэш функции:
йцукПетя -> fghfhvps
енгшПетя -> opjercjf
ячсмПетя -> xidmsarj

В базе мы храним "соль", хэши и емайл:
Код:
СОЛЬ | ХЭШИ     |Е-МАЙЛ (unique index)
-----+----------+------------------------
йцук | fghfhvps | a@a.ru
енгш | opjercjf | b@a.ru
ячсм | xidmsarj | c@a.ru

Зачем нам понадобился е-майл? Затем что в базе есть 3 Пети.
Для того что бы выбрать одного, надо еще одно условие: допустим е-майл (уникальный для каждого).

Теперь я хочу проверить: есть ли "Петя" с е-майлом "b@a.ru".
Что я делаю:
1. Ищу соль которая соответствует е-майлу: "b@a.ru" (результат: енгш)
2. Присоединяю соль к имени Петя (результат: енгшПетя)
3. Хэширую "енгшПетя" (результат: opjercjf)
4. Ищу есть ли строка с хэшем "opjercjf" и е-майлом "b@a.ru". Если есть - авторизация прошла успешно!

Я правильно рассуждаю тут?


----------------------------------
Теперь про недостатки и достоинства обеих методов.
Сценарий:
- злоумышленник получил доступ к базе и ключ (с помощью которого шифровались данные).
- он также знает алгоритм шифровальной программы.

Увы, в первом случае (двухстороннее шифрование) он сможет легко прочесть имена (йцукПетя).
Все что ему надо сделать это: отделить соль (йцук) от имени (Петя).


Во втором случае (одностороннее хеширование) он может попытаться успешно авторизироваться, что бы найти имя.
Злоумышленник знает (пример первой записи):
1. ключ (использованный для хэширования)
2. соль "йцук",
3. е-майл "a@a.ru",
4. результат хэширования "fghfhvps"

Ему надо найти имя чтобы авторизироваться (в данном случае "Петя").
Я не знаю придется ли ему перебирать все имена для этой записи?

_________________
Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)


Последний раз редактировалось AlexShop 29 Февраль 2008, 08:58:10, всего редактировалось 1 раз.
AlexShop Муж.
участник
34
Сообщения: 1866
Зарегистрирован: 17.02.04
Сообщение Добавлено: 29 Февраль 2008, 08:52:21 
По теме:

Цитата:
Простейшим примером односторонней функции является квадрат числа. Если, например, возвести числа «2» и «-2» в квадрат, то результатом обеих операций будет 4. Следовательно, даже зная, что была произведена конкретная операция - возведение в квадрат, и зная обратную ей функцию - извлечение квадратного корня - мы все равно не сможем однозначно сказать, какое же число было изначально взято, «2» или же «-2». А если функция шифрования идет немного дальше возведения числа в квадрат? А если число не одно, а их гораздо больше? Задача становится попросту неразрешимой, и единственным способом взлома паролей в Юниксе является brute-force - обычный перебор всех комбинаций символов.
http://www.ru-board.com/new/article.php?sid=112


_________________
Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
AlexShop Муж.
участник
34
Сообщения: 1866
Зарегистрирован: 17.02.04
Сообщение Добавлено: 29 Февраль 2008, 09:30:17 
Я пришел к такому выводу (упрощая мою задачу):
Если злоумышленник видит соль и хэши которые получены из комбинации: соль + имя
Код:
СОЛЬ | ХЭШИ
----------------
йцук | fghfhvps
енгш | opjercjf
ячсм | xidmsarj
он все равно не сможет узнать имя. Потому что не возможно расшифровать хеши одностороннего шифрования. Даже зная соль. Поэтому держать соль в открытом виде рядом с хешем - это нормально (про что fStrange уже сказал.)
--------------------
Задача злоумышленника, в этом случае не находить оригинальное имя, а подобрать фальшивое имя которое (вместе с солью) дало б точно такой же хэш.

_________________
Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 8 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100