Криптографиянын негиздери: хештөө жана коопсуз кокустук
Python стандарттык китепканасынын криптографиялык примитивдерин туура колдонуңуз — жана алардын чектерин билиңиз
hashlib, hmac жана secrets. Чеберчилик криптография жазууда эмес — туура примитивди тандап, классикалык каталарсыз (коопсуздук үчүн random колдонуу, сырсөз катары сырой хешти сактоо же == менен сырларды салыштыруу) колдонууда.
- хештөө, шифрлөө жана кодуулоону айырмалап, туурасын тандай аласыз,
hashlibменен контенттин хештерин, анын ичинде блоктор менен окулган чоң файлдарды эсептей аласыз,hmacменен билдирүүлөрдү аутентификациялап, сырларды туруктуу убакытта салыштыра аласыз,randomордунаsecretsменен коопсуз токендерди жана кокус маанилерди түзө аласыз,- сырсөздөрдү туз жана жай ачкыч түзүү функциясы (scrypt / PBKDF2) менен сактай аласыз,
- эмне үчүн өз криптографияңды ойлоп табууга болбойт экенин түшүндүрө аласыз.
1. Чаташтырылган үч нерсе: хештөө, шифрлөө, кодуулоо
Бир да API-ге тийгенге чейин, оюңда моделди бекемдеп ал. Бул үч амал окшош (байт кирет, байт чыгат), бирок таптакыр башка маселелерди чечет.
| Амал | Кайтарылабы? | Ачкыч керекпи? | Максаты |
|---|---|---|---|
| Кодуулоо (base64, hex, UTF-8) | Ооба, жеңил | Жок | Байттарды башка алфавитте берүү. Коопсуздук эмес. |
| Хештөө (SHA-256) | Жок (бир тараптуу) | Жок | Маалыматтын туруктуу өлчөмдөгү изи; бүтүндүк, дедупликация, издөө. |
| Шифрлөө (AES) | Ооба, ачкыч менен | Ооба | Маалыматты жашыруун кылуу, аны ачкыч ээлери гана окуй алат. |
Жаңы баштагандардын эң кеңири таралган катасы — кодуулоону коопсуздук деп эсептөө. Base64 — бул шифрлөө эмес: аны каалаган адам бир сапта чечмелейт. Жана хеш да шифрлөө эмес: ачкыч жок жана түпнусканы кайтарууга жол жок. Хеш «эки нерсе бирдейби?» жана «маалымат бузулганбы?» деген суроого жооп берет, эч качан «муну кийин окуй турганыма жашыр» дегенге эмес.
cryptography пакетинин AES-GCM / Fernet) — өзүнчө, ачкычты башкарууга бай тема.