Pull to refresh
  • by relevance
  • by date
  • by rating

Так ли безопасно хранение пароля в виде хеша

Website development *
Практически любой, даже начинающий разработчик, скажет вам, что пароли в базе надо хранить только в виде хеша (например md5). Это обеспечит их сохранность и увеличит безопасность системы в целом. Так ли это на самом деле?
В действительности нет, не так. Безопасность, да и сохранность, конечно повысится, но не очень сильно. В интернете уже давно есть базы хешей многих паролей. Трехминутный поиск только по Яндексу вывел меня на следующие сайты — MD5decrypter (568 002 хешей) и Insidepro (10 148 884 хешей). Уже не мало, ведь так? А это только открытые проекты и только по md5. Я думаю у любой серьезной хакерской группы есть свои базы, благо, с наличием бот-сетей распределенные вычисления перестают быть проблемой.
Кто-нибудь самый догадливый предложит, а давайте к пользовательскому паролю добавлять свой секретный длинный префикс. Ну или делать, например, md5 от md5. Взломщик никогда об этом не догадается и пароль не подберет.
Не поможет. В действительности при взломе хеша нам важен не оригинальный пароль, а поиск коллизии. Ведь неважно введем мы пароль 76854 или Fhndkts если md5(’76854′) будет совпадать с md5(’наша_секретная_строка’.’Fhndkts’).

Единственная проблема, что вариантов хешей все таки очень много и они будут занимать очень большое место в базе данных. да и поиск по ним потребует очень длительного времени.
Однако и эта проблема решается при помощи Rainbow Tables. Используя их мы на несколько порядков уменьшаем размер хранимой базы и скорость поиска пароля. Более подробно об этом можно почитать здесь и здесь. Для построение таких таблиц также нужны распределенные вычисления. И такие проекты есть — Rainbowcrack.com. Размах впечатляет — 2,628 таблиц, 102,080,000,000 цепочек (в каждой цепочке примерно 1000-1500 паролей), 1.49 Тб данных. Есть также российский подобный проект, но пока добились они намного меньшего.
Вот и как теперь хранить пароль?
denis.boltikov.ru
Total votes 31: ↑16 and ↓15 +1
Views 6.8K
Comments 55

Javascript — получение данных из формы в хэш-массив

Lumber room
Простая функция, которая может быть кому-то полезна.

Цель: отправить данные из формы методом jQuery.post() без перезагрузки страницы.
Задача: получить данные из формы в виде хэш-массива.

Читать дальше →
Total votes 11: ↑9 and ↓2 +7
Views 1K
Comments 14

Лечение битых файлов, закачки и докачки

Lumber room
В этом топике вы узнаете как:
  • восстановить повреждённую закачку, даже если файла нет в торрентах и других источниках, что содержат хеш его фрагментов;
  • скачать файл с докачкой, даже если она не поддерживается сервером;
  • докачивать, если сервер не даёт прямых ссылок, отдавая файл с разных адресов (но отдаёт Partial Content).

Нынче наткнулся на топик «Торрент vs. 64 кбит/с» и увидел проблему с которой сам неделю назад столкнулся.

Довольно долго, дней 10 (с перерывами), качал 3,5 Гб ISO образ на своём 100 Кбит/с. И этот самый образ повредился при скачивании. Попытался поискать это дело в торрентах и воспользоваться методом, описанным в вышеупомянутом топике — раньше я уже так восстанавливал файлы. Но файла там не оказалось (да и на ресурс откуда я скачивал он попал всего-то пару недель назад). Дабы меня не начали пинать за пиратство, сразу скажу что качал Visual Studio 2008 Professional SP1 RUS с Dreamspark.

Так вот, ждать ещё 10 дней не хотелось, как и производить особо много ручной работы, в результате чего родился скрипт, который и выполнил весь этот грязный процесс…
Читать дальше →
Total votes 10: ↑9 and ↓1 +8
Views 2.9K
Comments 4

О хэшах и проблеме распространения в торрентах

Decentralized networks
Наверняка многие из вас в процессе пользования торрентами сталкивались с такой досадной проблемой, когда торренты одного и того же контента имеют разные хэши, что не позволяет объединить в одной раздаче несколько с разных трекеров, сделав тем самым мультитрекерную раздачу.

Что же является причиной различия хэшей?

Как известно, хэш торрента или info_hash — это хэш SHA-1 от секции info в торрент-файле. В этой секции обычно находится размер раздачи, список файлов и другая информация о раздаваемом контенте. Например, торрент, созданный нашим любимым uTorrent, изнутри выглядит примерно вот так:



Действительно, ничего лишнего. А теперь посмотрим, что даст нам второй третий по популярности в мире битторрент-клиент Azureus от того же самого файла:

Читать дальше →
Total votes 112: ↑94 and ↓18 +76
Views 12K
Comments 108

Безопасная авторизация с передачей хешированного пароля

Website development *
При разработке одного проекта, появилась задача осуществить защиту в случае просмотра трафика, и просмотра исходника (могут узнать хеш пароля) злоумышленниками. Имея доступ ко всем данным, никто не должен авторизоваться на сервере, не зная исходный пароль. Варианты подмены IP адреса, получение пароля непосредственно в момент ввода (keylog), или брутфорс исключаем, это уже не забота веб сайта.

Пароль по сети передаваться не будет, поэтому используется хеширование прямо в браузере, для этого использую небольшую библиотеку JavaScript SHA-1. Почему SHA-1, а не, допустим, MD5? Считается, что SHA-1 немного надежнее, да и сама JavaScript библиотека меньше, чем аналогичная (на том же сайте) для MD5.
Читать дальше →
Total votes 39: ↑21 and ↓18 +3
Views 27K
Comments 66

Hash-навигация в AJAX-сайтах

Ajax *
Sandbox
Если вы строите ajax-cайт, то рано или поздно, вы сталкиваетесь с проблемой «не работает кнопки назад-вперед в браузере». Потому что ajax — асинхронный, он не выполняет переход на другие страницы, а всего-лишь меняет некую часть содержимого на текущей.

Вторая проблема, с которой борются все разработчики — проект перед сдачей в продакшн просто изобилирует кучами javascript (ajax) кода. Весь этот код по своей сути — всего лишь запросы страниц с севера «без шаблона», т.e., чистое содержимое страницы.
Читать дальше →
Total votes 14: ↑9 and ↓5 +4
Views 25K
Comments 29

CityHash для Python

Python *
Буквально вчера компанией Google была выложена библиотека CityHash с набором хеш-функций для строк.
Мне захотелось попробовать поиспользовать CityHash в своих проектах на Python, а так как сейчас начал заниматься Cython'ом, решил быстренько сделать обертку для CityHash на Cython.
Читать дальше →
Total votes 43: ↑40 and ↓3 +37
Views 1.9K
Comments 9

LogLog — находим число уникальных элементов

Algorithms *
Здравствуй, Хабр! Мы с тобой уже побаловались фильтрами Блума и MinHash. Сегодня разговор пойдёт о ещё одном вероятностном-рандомизированном алгоритме, который позволяет с минимальными затратами памяти определить примерное число уникальных элементов в больших объёмах данных.

Для начала, поставим себе задачу: предположим, что у нас имеется большой объём текстовых данных — скажем, плоды литературного творчества небезызвестного Шекспира, и нам необходимо подсчитать количество различных слов встречающихся в этом объёме. Типичное решение — счётчик с урезанной хеш-таблицей, где ключами будут слова без ассоциированных с ними значений.

Способ всем хорош, но требует относительно большой объём памяти для своей работы, ну а мы с вами, как известно, неугомонные гении эффективности. Зачем много, если можно мало — примерный размер словарного запаса упомянутого выше Шекспира, можно вычислить используя всего 128 байт памяти.

Кажется невозможным?
Total votes 81: ↑80 and ↓1 +79
Views 22K
Comments 30

Считаем хэши файлов любого размера прямо в браузере

Self Promo
В сети очень много сайтов для подсчета хэшей (MD5, SHA1, SHA2) файлов, однако, все сервисы, что я смог найти, имеют один и тот же недостаток: размер файла ограничен. Также необходимо сначала загрузить файл на сервер, чтобы получить результат вычислений. Это очень неудобно.

Поэтому я решил создать небольшой сервис MD5 File, расчет в котором будет происходить непосредственно в браузере пользователя. Нет необходимости загружать файлы на сервер (экономим трафик и время) и появляется возможность работать с файлами любого размера.

Картинка и немного информации под катом
Читать дальше →
Total votes 51: ↑48 and ↓3 +45
Views 3.4K
Comments 30

Система хранения файлов с дедупликацией между пользователями

Self Promo
Начало этому проекту положила очень простая идея, о которой, я год назад писал на страницах хабрахабра. Именно тогда, я задумался, почему все сервисы хранения файлов такие жадные? Почему они зарабатывают на том, что несколько различных пользователей, хранят один и тот же файл? Почему мы должны платить дважды, трижды, а иногда и в сотни раз больше, чем реально это стоит? По-моему это несправедливо.

Вторая проблема всех платных сервисов хранения файлов – абонентская плата. Нас заставляют постоянно платить за хранение наших файлов. Если не заплатить, файлы удалят. Больше похоже на вымогательство, чем на удобный сервис, особенно в свете вот этого исследования на тему стоимости хранения данных. Поэтому я решил, что настала пора создать проект, который лишен этих недостатков.

Так появилась идея, а что из этого получилось можно прочитать под хабракатом.
Читать дальше →
Total votes 25: ↑21 and ↓4 +17
Views 6.2K
Comments 111

Хеш + соль, как панацея от декрипта

Information Security *
Хабр не место для репостов и копи-паст — запомнил!
Это репост комментария упомянутого в хабрпосте, а сам комментарий является комментарием (простите за тавтологию) вот на эту статью, где и может быть найден. На мой взгляд ему место на хабре, потому-что он шедеврален! Это должен прочитать каждый программист и DBA, да и вообще полезен для любого %username%.
Читать дальше →
Total votes 63: ↑21 and ↓42 -21
Views 38K
Comments 108

Взлом хэшей на PHDays 2012: конкурс Hash Runner

Positive Technologies corporate blog Information Security *

На PHDays 2012 было много сугубо технических, интересных, зрелищных конкурсов, но один из них прошел практически незаметно для посетителей форума: это был Hash Runner, участники которого занимались взломом хэшей.

На подобных соревнованиях сохраняется, как правило, господство ряда отдельных команд: Hashcat, Inside Pro, john-users… И не удивительно, поскольку это сообщества разработчиков, тестировщиков и пользователей, использующих наиболее популярные инструменты для взлома хэшей. Секрет успеха — не только в огромном опыте, хорошо подготовленных командах и доступе к внушительным вычислительным ресурсам, но и в возможности «на лету» модифицировать инструментарий — в зависимости от текущих потребностей.

Вышеперечисленные команды приняли активное участие в конкурсе Hash Runner на PHDays 2012. Два дня участники сражались за главный приз — видеокарту AMD Radeon HD 7970 (конкурс стартовал в 10:00 30 мая и закончился в 18:00 31 мая).
Что из этого получилось...
Total votes 15: ↑13 and ↓2 +11
Views 7.5K
Comments 0

Возвращаемся на раздачу или как сделать невозможное

Decentralized networks

Предыстория


Не так давно, а именно 5 июня хабрачеловек по имени alan008 задал вопрос. Чтобы не заставлять ходить за подробностями, приведу его здесь:

Нужна помощь!

За несколько лет с разных трекеров (преимущественно c rutracker'а) разными клиентами (преимущественно uTorrent'ом) скачано много гигабайт разного полезного контента. Скачанные файлы впоследствии вручную перемещались с одного диска на другой, uTorrent их соответственно не видит. Многие .torrent файлы устарели сами по себе (например, велась раздача сериала путем добавления новых серий заменой .torrent файла).

Теперь сам вопрос: есть ли способ автоматически (не вручную) установить соответствие между имеющимися на компьютере .torrent файлами и содержимым, раскиданным по разным логическим дискам компьютера? Цель: удалить лишние (неактуальные) .torrent файлы, а для актуальных — поставить всё на раздачу. У кого какие идеи? :)

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

В обсуждениях сошлись на том, что если это и можно сделать, то только ручками. Мне же этот вопрос показался интересным, и после возвращения из отпуска я нашел время, чтобы в нем разобраться.

Потратив в общей сложности неделю на разбор формата .torrent-файла, поиск нормально работающей библиотеки для его парсинга, я приступил к написанию программы, которая позволит решить проблему затронутую в упомянутом вопросе.

Прежде чем начать, стоит отметить несколько моментов:
  1. Получилось много, но не все.
  2. По формату файла .torrent будут даны лишь необходимые пояснения.
  3. Людей, чувствительных к временами некачественному коду, прошу меня заранее простить — я знаю, что многое можно было написать лучше, оптимальнее и безглючнее.

Для тех, кому интересно, что из этого получилось, технические подробности и подводные камни — прошу под кат.
Читать дальше →
Total votes 121: ↑121 and ↓0 +121
Views 65K
Comments 77

Подсчёт md5-хэша для mp3-файла

Sound
Итак, нам нужно подсчитать хэш-сумму для файла MP3. Простой прогон файла через md5.exe не годится, так как файл содержит метаинформацию — теги, которые имеют тенденцию со временем меняться. Таким образом, всего лишь обновив теги в файле, мы получаем уже другую хэш-сумму, что не годится совершенно.

Кстати, для форматов FLAC и APE данная проблема практически отсутствует, так как они обычно изначально содержат хэш-сумму аудио-данных, прописываемую кодировщиком. Для FLAC’а значение можно получить командой metaflac --show-md5sum.

Далее — достаточно надёжный способ подсчёта (не перцептивного) хэша на основе бинарных данных, хранимых в MP3.

1) Подход №1
2) Подход №2
3) Теги Xing и Lame
4) Resync
5) Надёжность подсчёта

Читать дальше →
Total votes 29: ↑25 and ↓4 +21
Views 11K
Comments 13

Ruby NoName Podcast S04E18

Ruby *

Подкаст

http://ruby.rpod.ru/284727.html

Новости


Читать дальше →
Total votes 22: ↑18 and ↓4 +14
Views 2.1K
Comments 7

Изменения внутреннего представления строк в Java

Java *
Translation

Вступление


Это мой первый перевод статьи. Решил посвятить его Java, как ни странно. В статье рассказывается об изменениях строкового типа данных, которые произошли в Java.

ВАЖНО: В 17 апдейте Java 7 по-прежнему ничего не поменялось в отношении статьи.

Разделение массива символов char[]

В настоящей реализации класса String имеется 4 экземплярных поля: массив символов char[] value — содержащий символы строки, int offset — индекс первого используемого символа в массиве value, int count — количество используемых символов и int hash — кэшированное значение вычисленного хеш кода для данной строки. Как вы могли заметить, в большинстве случаев строка будет иметь значения offset = 0 и count = value.length. Единственное исключение из этого правила, возможно, когда строка создается путем вызова метода viaString.substring или любым методом, который использует данный метод (например, split).
Читать дальше →
Total votes 36: ↑35 and ↓1 +34
Views 16K
Comments 26

Как испортить безопасность паролей, следуя советам с Хабра

Information Security *
В недавней статье «Как надо хешировать пароли и как не надо» было озвучено предложение использовать некий локальный параметр (его еще называют перцем), как еще один рубеж защиты паролей. Несмотря на то, что это решение создает больше проблем, чем решает, большинство комментаторов поддержали эту идею, а несогласных, как водится, заминусовали. Мир в моей голове рухнул и я решил написать эту статью.

Суть


Перец — такая глобальная случайная строка, которая дописывается ко всем паролям (помимо соли). Она секретна (в отличии от соли). Таким образом, получив базу, узнать пароли становится невозможно. И все, казалось бы, хорошо…
Читать дальше →
Total votes 278: ↑229 and ↓49 +180
Views 91K
Comments 135

Быстрый доступ к map по ключу строке

Programming *C++ *
В статье «String enum — строковые enum» я писал о том как связывать текстовые представления с enum class — метод хороший но только если все элементы заранее известны, но зачастую бывает что строки являются некими идентификаторами и конечно же заранее не известны, а зачастую будут добавляться позднее и причем без пересборки программы.

Требования к библиотеке все теже:

  • Кроссплатформенность;
  • Минимум зависимостей;
  • Скорость чтения;
  • Простой синтаксис;


Пример конфига
{
    "objects":
    [
        {
            "id": "object1",
            "events":
            {
                "event1":{
                    "give": {"object2": 4}
                },
            }
        },
        {
            "id": "object2",
            "events":
            {
                "event2":{
                    "give": {"object1": 3}
                },
            },
            {
            "id": "object3",
            "events":
            {
                "event3":{
                    "give": {"object3": 4}
                },
            }
        },



Первая и самая простая идея которая напрашивается это:
    std::map<std::string,script> events;

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

Вторая идея парсить этот конфиг в 2 прохода тогда на 2-м проходе object1, object2, object3 будут уже известны и можно будет записать на них прямо указатели или ссылки. Но если зависимости еще более сложные то такой подход может и не сработать.

Я предлагаю способ позволяющий существенно сократить runtime издержки подобных конструкций

Читать дальше →
Total votes 16: ↑12 and ↓4 +8
Views 19K
Comments 28

Реализация словаря в Python 2.7

Python *Algorithms *
Sandbox
В этой статье пойдёт речь о том, как реализован словарь в Python. Я постараюсь ответить на вопрос, почему элементы словаря не упорядочены, описать, каким образом словари хранят, добавляют и удаляют свои элементы. Надеюсь, что статья будет полезна не только людям, изучающим Python, но и всем, кто интересуется внутренним устройством и организацией структур данных.
Читать дальше →
Total votes 65: ↑64 and ↓1 +63
Views 103K
Comments 37

Подписываем данные: HMAC на практике в API и Web-формах

Information Security *PHP *Programming *API *
Recovery mode
HMAC (сокращение от англ. hash-based message authentication code, код проверки подлинности сообщений, использующий односторонние хеш-функции) — в криптографии, один из механизмов проверки целостности информации, позволяющий гарантировать то, что данные, передаваемые или хранящиеся в ненадёжной среде, не были изменены посторонними лицами (атака типа «man in the middle»).

К таким данным могут относиться например данные, передаваемые в запросах API, когда критически важна целостность передаваемой информации, или же при передаче данных из Web-форм.
Читать дальше →
Total votes 18: ↑14 and ↓4 +10
Views 44K
Comments 101
1