Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2010, 21:31   #1
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию Шифрование данных средствами Delphi

Добрый день!

Встала такая задача: зашифровать некоторую информацию с помощью пароля.
Знаю что таких тем куча, но просидев в гугле два дня и день на форумах в поиске ответа так и не пришёл к результату.

Способов нашёл большое множество, читал и про CryptoAPI и про хэш-функции, читал про шифрование с помощью xor, но все они так или иначе обладали некоторыми недостатками, из-за чего поиск продолжался дальше.

Задача стоит самая тривиальная: Есть пароль, который знает пользователь, есть информация, которая должна быть зашифрована с помощью этого пароля. Всё это должно сохраняться в файл. Соответственно пароль тоже должен храниться в файле, для определения правильности ввода пароля.

Информации уже накопилось столько что не знаю уже что и выбрать, каким способом лучше шифровать, в каком виде сохранять пароль и прочее.

Т.е. задача состоит в том, чтобы выбрать лучший алгоритм шифрования данных, хранение пароля, и реализации этого в Delphi.

Уверен что это тема не одного меня интересует, или интересовала, и хотелось бы узнать мнение тех, кто уже сталкивался с этим и нашёл какие-то конкретные способы реализации данной задачи.

Важно высокая взломо-устойчивость.
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Старый 11.08.2010, 22:38   #2
Ins
Форумчанин
 
Регистрация: 29.12.2007
Сообщений: 137
По умолчанию

Цитата:
для определения правильности ввода пароля.
Глупости, пароль не должен хранится НИГДЕ, только в голове того, кто его ввел. Для проверки правильности, в твоем случае, можно поступить так (два способа, какой лучше - решай сам):
1. Пытаемся расшифровать тем паролем, что ввел пользователь, и проверяем контрольную сумму результата. Если она совпадает с ранее сохраненной - пароль верный, и расшифрованные данные валидные, иначе - у нас на выходе абра-кадабра и пароль неверен.
2. Храним в файле вместо самого пароля его хеш-дайджест (MD5, SHA-1), при расшифровке юзер вводит пароль, считаем его хеш, если он не совпадает с тем, что в файле - даже не пытаемся расшифровать а сразу пишем что пароль не верный
Первый способ лучше защищает от перебора, т.к. операция расшифровки не такая уж быстрая, и перебор займет много времени, второй лучше тем, что более оптимальный - пользователю не нужно долго ждать, чтобы потом узнать что он ошибся при вводе пароля. Вот и все. Для шифрования - CryptoAPI, любой симметричный алгоритм (его выбор не играет роли в твоем случае, RC2 или RC4 проще всего т.к. поддерживаются дефолтным криптопровадером), для контрольной суммы - CRC32. Пароль используется для генерации ключа при зашифровке и расшифровке - функция CryptDeriveKey

Цитата:
читал и про CryptoAPI
А мою статью читал? Там вроде и примеры должны быть:
http://www.delphikingdom.com/asp/vie...catalogid=1271

Последний раз редактировалось Ins; 11.08.2010 в 22:56.
Ins вне форума Ответить с цитированием
Старый 12.08.2010, 00:27   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Соответственно пароль тоже должен храниться в файле, для определения правильности ввода пароля.
я полностью согласен с Ins — это глупость и реально ДЫРИЩА в защите!!
Пароль нигде не должен храниться!

да и со всем остальным сказанным Ins я полностью согласен!

Разве что добавлю - я бы лично не стал связываться с CryptoAPI (но это, скажем, моё личное предпочтение), ибо есть куча бесплатных библиотек реализующих сильную криптографию — можно брать любую.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.08.2010, 01:19   #4
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию

2 Ins: Извините, не правильно выразился. Я это и имел ввиду, что в файле должен храниться пароль, но не в откртом в виде, а либо его хэш-отпечаток, либо ещё что-то. Но чтобы можно было проверить правильность.
Статью читал, но не на этом сайте.

На счёт СryptoAPI читал не самые лучшие отзывы, и хотел бы услышать ваши. Писали что реализация Microsoft оставляет желать лучшего. Это правда? Мне нужна очень хорошая шифрация данных. Чтобы шанс на влом этих данных был минимален. Примерно как это делается в WinRAR. Т.е. защищенность данных зависит от пароля.

2 Serge_Bliznykov: Чем вызванно данное предпочтение. И если вы уже сталкивались с какими-нибудь сторонними библиотеками, то можете посоветовать какую-нибудь?
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Старый 12.08.2010, 01:24   #5
Ins
Форумчанин
 
Регистрация: 29.12.2007
Сообщений: 137
По умолчанию

Цитата:
Чтобы шанс на влом этих данных был минимален.
От Агенства Национальной Безопасности США ты данные, скорее всего, не защитишь, от остальных - защитишь, устроит? И не нужно увлекаться Большей степенью защиты, чем предлагает CryptoAPI, потому что это просто незаконно (по крайней мере так было в те времена, когда я этой темой интересовался). В мире действует ограничение на "сильную криптографию", которая в MS-овских криптопровайдерах учтена, и тем не менее, уровень защиты очнь надежен, и как ты и просишь - определяется надежностью пароля

Цитата:
Это правда?
Может и правда, но я слышу впервые. А где гарантия что у сторонних разработчиков все тип-топ? Я на самом деле существенной разницы в том, кем реализованы криптоалгоритмы не вижу, при условии, что они реализованы как надо. Если просто CryptoAPI неудобен - да, можно найти удобные объектные оболочки

Последний раз редактировалось Ins; 12.08.2010 в 01:28.
Ins вне форума Ответить с цитированием
Старый 12.08.2010, 01:43   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

почитайте интересное обсуждение тут на форуме:
Способ шифрования

по поводу библиотек - тут на форуме (например, мой пост #2)

а по поводу моего отношения CryptoAPI:
1) это скорее неприязнь, чем недоверие.
Сомнений в том, что там криптография реалзизована грамотно - у меня нет. Другой вопрос, что там могут быть дыры для спецслужб... но это другой вопрос. Да и доказательств этого вроде бы тоже нет.
2) я практического опыта использования CryptoAPI не имею...
3) основной причиной неиспользования стало то, что CryptoAPI может быть отключено/отсутствовать на разных версиях/дистрибутивах Windows (а нужно было, чтобы программа работала не только на Win NT/Win 2000/Win XP, но и на Windows 98... именно поэтому в реальном проекте и было выбрано шифрование через Delphi Encryption Compendium...

Поэтому, возможно, что моё отношение к CryptoAPI и ошибочно/не справедливо... вполне даже может быть.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.08.2010, 01:46   #7
Ins
Форумчанин
 
Регистрация: 29.12.2007
Сообщений: 137
По умолчанию

Цитата:
Другой вопрос, что там могут быть дыры для спецслужб... но это другой вопрос. Да и доказательств этого вроде бы тоже нет.
"Цифровую крепость" Дена Брауна не читал? Рекомендую, несмотря на полное несоответствие действительности упоминаемых там технических деталей. Даже если там и есть лазейки для служб безопасности, ТО ПУСТЬ ОНИ ТАМ И БУДУТ, для нашего же блага

Последний раз редактировалось Ins; 12.08.2010 в 01:48.
Ins вне форума Ответить с цитированием
Старый 12.08.2010, 02:58   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
CryptoAPI может быть отключено/отсутствовать на разных версиях/дистрибутивах Windows (а нужно было, чтобы программа работала не только на Win NT/Win 2000/Win XP, но и на Windows 98...
Вот это точно неверно. Провайдер, который вы хотите, может не стоять - это да. Но чтобы весь КриптоАПИ? А сама система-то как без него работать будет?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 12.08.2010, 03:38   #9
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Реализуйте своими силами какой нибудь алгоритм шифрования, например Blowfish.

PS: Раньше был надежным алгоритм DES, но его уже легко взломать.
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 12.08.2010, 04:11   #10
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию

2 Sparkman: Ну не обязательно реализовывать своими силами, по ссылкам выше дан компонент Delphi Encryption Compendium, там уже эти алгоритмы реализованы, и даны исходники, если нужно, то можно вытащить их оттуда.

P.S. ИМХО, для взятия хэша думаю брать алгоритм SHA-1, а для шифрования Rijndael, поскольку они являются более устойчивыми к взлому.
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование данных [обсуждение] Lime Свободное общение 25 23.06.2010 15:19
2. Составить однотабличную базу данных средствами Delphi bestlover Помощь студентам 4 18.06.2010 08:48
Шифрование данных didar_ Общие вопросы Delphi 2 07.11.2009 12:24
Шифрование данных frayerok Общие вопросы C/C++ 0 20.10.2008 22:35
jpg в базе данных средствами ADO SSSergey БД в Delphi 5 11.06.2007 12:17