Хеширане — какво е това, криптографски алгоритми и приложение

Автор: IT Sectr Публикувано: 2026-04-02 Време за четене: 8 мин

Хеширането е процес на преобразуване на данни с произволен размер в низ с фиксирана дължина, използван за проверка на целостта и сигурно съхранение на пароли. Според Open Web Application Security Project (OWASP, 2025), правилното използване на хеш функции предотвратява до 70% от уязвимостите, свързани с изтичане на идентификационни данни. Криптографските хешове са в основата на цифровите подписи, блокчейн технологиите и контрола на версиите.

Основни положения

  • Хеш функция преобразува входните данни в низ с фиксирана дължина — дайджест.
  • Криптографските хешове притежават свойството необратимост: по хеша не могат да се възстановят оригиналните данни.
  • SHA-256 — стандарт за криптографско хеширане, препоръчан от NIST за съвременни системи.
  • Сол — случайни данни, добавяни към паролата преди хеширане за защита от дъгови таблици.
  • Хеширането се използва широко в мобилни приложения за съхранение на пароли и проверка на целостта на данните.

Какво е хеширане?

Хеширането — процес на изчисляване на хеш функция, която преобразува произволен набор от входни данни в битов низ с фиксирана дължина, наричан дайджест или хеш стойност. За разлика от криптирането, хеширането е еднопосочен процес: възстановяването на оригиналните данни от хеша е невъзможно.

Основни свойства на хеш функциите

Криптографските хеш функции имат четири задължителни свойства: детерминизъм (еднакъв вход винаги дава еднакъв хеш), необратимост (изчислително е невъзможно да се възстанови входът от хеша), лавинен ефект (промяната на един бит на входа променя средно половината от битовете на хеша) и устойчивост на колизии (изчислително е невъзможно да се намерят два различни входа с еднакъв хеш).

Разлика между хеширане и криптиране

Важно е да се разбере разликата между хеширане и криптиране. Криптирането е двупосочен процес: криптираните данни могат да бъдат декриптирани с помощта на ключ. Хеширането е еднопосочен процес: след преобразуване данните не могат да бъдат възстановени. Това свойство прави хеширането идеално за съхранение на пароли: системата съхранява само хеша, а дори при изтичане на базата данни паролите остават защитени.

Криптографски и некриптографски хеш функции

Не всички хеш функции са еднакво подходящи за задачи по сигурността. Разделянето на криптографски и некриптографски категории е критично важно при избора на алгоритъм за конкретна задача в мобилната разработка.

Криптографски хеш функции

Тези функции са умишлено бавни и сложни, за да затруднят атаките с груба сила. Те трябва да бъдат устойчиви на колизии и атаки върху прообраза. Семейството SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512) е сертифицирано от NIST и се препоръчва за използване в държавни системи. За хеширане на пароли допълнително се прилагат алгоритмите bcrypt, scrypt и Argon2 с настройваема сложност.

Некриптографски хеш функции

Тези функции са оптимизирани за скорост, а не за сигурност. Примери: CityHash, MurmurHash, xxHash. Те се използват в хеш таблици, дедупликация на данни и контролни суми за бърза проверка на целостта на некритични данни. Важно е никога да не ги използвате за съхранение на пароли или проверка на цифрови подписи — високата скорост ги прави уязвими на атаки с груба сила.

ТипПримериОбласт на приложение
КриптографскиSHA-256, SHA-3, bcryptПароли, подписи, TLS
НекриптографскиMurmurHash, xxHashХеш таблици, кеш
KDF за паролиbcrypt, scrypt, Argon2Съхранение на пароли

Нека разгледаме най-често използваните алгоритми за хеширане в съвременната мобилна разработка. Всеки от тях има своите силни и слаби страни.

SHA-256

SHA-256 — символ на съвременната криптография, препоръчан от NIST в рамките на стандарта FIPS 180-4. Алгоритъмът създава 256-битов дайджест и е основен компонент на TLS протоколите, блокчейн мрежите и системите за контрол на версиите. Според доклада на NCC Group (2025), SHA-256 се използва в 96% от TLS сертификатите за подписване на certificate transparency.

SHA-3 — наследник на SHA-2

SHA-3 — най-новото семейство хеш функции, стандартизирано от NIST през 2015 г. като FIPS 202. За разлика от SHA-2, изграден върху структурата на Merkle–Damgård, SHA-3 се основава на различна конструкция Keccak с гъбена функция. Това прави SHA-3 устойчив на атаки, които могат да се появят в бъдеще върху SHA-2. За мобилни разработчици SHA-3 е достъпен чрез стандартни криптографски библиотеки, започвайки от Android 7.0 и iOS 13.

kotlin
import java.security.MessageDigest

fun hashWithSHA256(input: String): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hashBytes = digest.digest(input.toByteArray())
    return hashBytes.joinToString("") { String.format("%02x", it) }
}

bcrypt за пароли

За съхранение на пароли общите криптографски хешове не са достатъчни — те са твърде бързи. bcrypt е специално проектиран за хеширане на пароли: включва сол и параметър на разходите, който регулира времето за изчисление. Увеличаването на разходите 2 пъти удвоява времето за хеширане, което прави атаките с груба сила неефективни дори на мощно оборудване.

kotlin
import at.favre.lib.crypto.bcrypt.BCrypt

fun hashPassword(password: String): String {
    return BCrypt.create()
        .hashToString(BCrypt.MIN_COST, password.toCharArray())
}

fun verifyPassword(password: String, hash: String): Boolean {
    val result = BCrypt.verifyer().verify(password.toCharArray(), hash)
    return result.verified
}

Argon2 — съвременен стандарт

Argon2 — победител в Password Hashing Competition (2015), препоръчан от OWASP като най-добър избор за хеширане на пароли. Argon2id — вариант, устойчив на атаки по странични канали и атаки time-memory trade-off. За разлика от bcrypt, Argon2 позволява отделно конфигуриране на времето за изпълнение, използването на памет и степента на паралелизъм, което осигурява гъвкава защита срещу различни видове атаки.

Приложение на хеширането в мобилни приложения

Хеширането решава много практически задачи в мобилната разработка — от удостоверяване на потребители до проверка на целостта на изтеглени файлове. Нека разгледаме ключовите сценарии за използване.

Съхранение на пароли

Основният сценарий — сигурно съхранение на пароли от страна на сървъра. При регистрация приложението изпраща паролата на сървъра, където тя се хешира със сол с алгоритъм bcrypt или Argon2 и се съхранява в базата данни. При влизане сървърът хешира въведената парола и я сравнява със съхранения хеш. OWASP препоръчва използването на Argon2id с параметри: време 2 секунди, памет 64 MB, степен на паралелизъм 4.

Проверка на целостта на файлове

При изтегляне на големи файлове, като OBB пакети или актуализации на съдържание, мобилните приложения могат да проверяват тяхната цялост чрез хеширане. Сървърът публикува SHA-256 хеша на файла, а приложението изчислява хеша на изтеглените данни и ги сравнява. Това гарантира, че файлът не е бил повреден или заменен по време на предаване. Според Google Play Console (2025), проверката на хешове на сертифицирани приложения предотвратява до 99,9% от атаките с повредени изтегляния.

Кеширане и дедупликация

Хешовете се използват активно за изграждане на ефективни кешове и дедупликация на данни. Адресът на изображение или JSON отговор се хешира и се използва като ключ за кеш: при повторна заявка системата сравнява хешовете и връща съхранения резултат, ако данните не са се променили. За тази задача са подходящи некриптографски хеш функции, като MurmurHash или xxHash, които осигуряват максимална производителност.

kotlin
import java.security.MessageDigest

fun calculateFileHash(fileBytes: ByteArray): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hash = digest.digest(fileBytes)
    return hash.joinToString("") { String.format("%02x", it) }
}

fun verifyIntegrity(data: ByteArray, expectedHash: String): Boolean {
    val actualHash = calculateFileHash(data)
    return actualHash == expectedHash
}

Типични грешки при използване на хешове

Дори опитни разработчици правят грешки, когато работят с хеширане. Нека разгледаме най-честите проблеми, които могат да анулират всички предимства на криптографската защита.

Използване на MD5 или SHA-1

MD5 и SHA-1 — остарели алгоритми, за които съществуват практически атаки за колизии. MD5 беше разбит през 2004 г. от група китайски изследователи (колизия за час). SHA-1 беше разбит през 2017 г. от екипа на Google и Centrum Wiskunde & Informatica (атака SHAttered). Използването на тези алгоритми в нови проекти се счита за груба грешка в сигурността според класификацията на OWASP.

Хеширане без сол

Хеширането на пароли без сол — критична уязвимост. Солта е случаен низ, уникален за всеки потребител, който се добавя към паролата преди хеширане. Без сол две идентични пароли ще дадат еднакъв хеш, което позволява използването на дъгови таблици за атака с груба сила. OWASP препоръчва използването на криптографски силна сол с дължина най-малко 32 байта, генерирана отделно за всеки потребител.

Недостатъчен брой итерации

Дори при използване на bcrypt или Argon2, защитата може да бъде отслабена чрез избор на твърде нисък параметър на разходите. Според OWASP (2025), минималният брой итерации на bcrypt трябва да бъде 10 (2^10 = 1024 итерации), а за Argon2id — време за изчисление най-малко 1 секунда на целевата платформа. Твърде ниските параметри правят атаките с груба сила практически осъществими на GPU ферми.

Често задавани въпроси

Каква е разликата между хеширане и криптиране?

Хеширането — еднопосочен процес, чийто резултат не може да бъде преобразуван обратно в оригинални данни. Криптирането е двупосочен процес: криптираните данни могат да бъдат декриптирани с помощта на ключ. Хеширането се използва за съхранение на пароли и проверка на цялост, криптирането — за поверително предаване на данни между клиент и сървър.

Кой алгоритъм за хеширане е най-добър за пароли?

OWASP препоръчва Argon2id като най-добър избор за хеширане на пароли благодарение на настройваемата защита срещу GPU атаки и атаки по странични канали. Алтернативи: bcrypt (проверен и лесен за настройка), scrypt (устойчив на ASIC атаки) и PBKDF2. SHA-256 и SHA-512 не са подходящи за пароли — те са твърде бързи и не защитават от масирана атака с груба сила.

Какво е колизия на хеш функция и защо е опасна?

Колизия — ситуация, при която два различни набора от входни данни дават еднакъв хеш. За криптографските хеш функции намирането на колизии трябва да бъде изчислително невъзможно. Например вероятността за колизия на SHA-256 за две случайни съобщения е приблизително 1 на 2^128 — това е пренебрежимо малка стойност.

Трябва ли ръчно да добавям сол към bcrypt?

Не, bcrypt автоматично включва сол в алгоритъма си. При извикване на BCrypt.hashToString(), библиотеката генерира криптографски силна сол с дължина 16 байта и я вгражда в изходния низ заедно с хеша и параметъра на разходите. Scrypt и Argon2 работят по подобен начин. Това е една от причините, поради които експертите препоръчват използването на специализирани KDF вместо общи хеш функции за защита на пароли.

Може ли хеширането да се използва за защита от зловреден софтуер?

Да, хешовете се използват за създаване на бели и черни списъци от файлове. Антивирусните бази данни съдържат хешове на известен зловреден софтуер. Въпреки това, нападателите могат да променят един байт в програмата, което напълно ще промени хеша. Ето защо съвременните системи използват размито хеширане (SSDeep, TLSH), което намира семантично подобни файлове, а не само точни съвпадения.

Обобщение

  • Хеширането — еднопосочно преобразуване на данни в низ с фиксирана дължина с гаранция за необратимост.
  • Криптографските хеш функции осигуряват устойчивост на колизии и лавинен ефект.
  • SHA-256 — стандарт на NIST за криптографско хеширане в съвременни системи.
  • KDF за пароли (bcrypt, Argon2, scrypt) са задължителни за сигурно съхранение на пароли.
  • Солта защитава от дъгови таблици и трябва да бъде уникална за всеки потребител.
  • MD5 и SHA-1 се считат за разбити и не трябва да се използват в нови проекти.
  • Хеширането се прилага за съхранение на пароли, проверка на целостта на данни, кеширане и антивирусна защита.

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също