Алгоритмы хеширования

Алгоритмы хеширования — это математические функции, преобразующие входные данные любого размера в выходные данные фиксированного размера (хеш), используемые для целостности данных, хранения паролей и консенсуса блокчейна.

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

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

Ключевые алгоритмы включают: SHA-256 (Bitcoin, широко используется), Keccak-256 (Ethereum), SHA-3 (стандарт NIST), Blake2/Blake3 (быстрые, безопасные) и Poseidon (ZK-friendly). Разные алгоритмы предлагают компромиссы в безопасности, скорости и пригодности для конкретных случаев использования, таких как доказательства с нулевым разглашением.

Использование в блокчейне включает: майнинг Proof-of-Work, деревья Меркла для целостности данных, генерацию адресов, идентификаторы транзакций и схемы обязательств. Понимание хеширования важно для безопасности и разработки блокчейна.

        graph LR
  Center["Алгоритмы хеширования"]:::main
  Pre_cryptography["cryptography"]:::pre --> Center
  click Pre_cryptography "/terms/cryptography"
  Pre_mathematics["mathematics"]:::pre --> Center
  click Pre_mathematics "/terms/mathematics"
  Rel_proof_of_work["proof-of-work"]:::related -.-> Center
  click Rel_proof_of_work "/terms/proof-of-work"
  Rel_digital_signatures["digital-signatures"]:::related -.-> Center
  click Rel_digital_signatures "/terms/digital-signatures"
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧒 Простыми словами

Generated ELI5 content

🤓 Expert Deep Dive

Generated expert content

❓ Частые вопросы

Почему нельзя обратить хеш, чтобы получить исходные входные данные?

Хеш-функции сжимают произвольное количество входных данных в выходные данные фиксированного размера, поэтому каждому хешу соответствует множество возможных входных данных (информация теряется). Они также разработаны с математической сложностью, делающей обращение вычислительно невозможным. Это называется устойчивостью к прообразу.

Какой алгоритм хеширования использует Bitcoin?

Bitcoin использует SHA-256 (SHA-256d, фактически двойной SHA-256) для майнинга Proof-of-Work и хеширования транзакций, а также RIPEMD-160 в сочетании с SHA-256 для генерации адресов. Этот выбор балансирует безопасность, производительность и устойчивость к известным атакам.

Что делает хеш-функцию «ZK-friendly»?

ZK-friendly хеш-функции, такие как Poseidon и Pedersen, разработаны для эффективного использования внутри схем доказательств с нулевым разглашением. Традиционные хеши, такие как SHA-256, дороги в ZK-доказательствах, так как используют побитовые операции, которые сложно доказать. ZK-friendly хеши используют арифметические операции, родные для систем доказательств.

🔗 Связанные термины

Предварительные знания:

📚 Источники