NaCl (праграмнае забеспячэнне)

**NaCl (Networking and Cryptography Library**, вымаўляецца як «соль») — гэта высокахуткасная праграмная бібліятэка для крыптаграфіі, якая з’яўляецца грамадскім здабыткам. 

NaCl быў створаны матэматыкам і праграмістам Дэніэлам Дж. Бернштэйнам, які найбольш вядомы стварэннем qmail і Curve25519. У асноўную каманду таксама ўваходзяць Таня Ланге і Петэр Швабе. Асноўнай мэтай пры стварэнні NaCl, паводле дакумента каманды ад 2011 года, было «пазбегнуць розных тыпаў крыптаграфічных катастроф, ад якіх цярпелі папярэднія крыптаграфічныя бібліятэкі». Каманда дамагаецца гэтага за рахунак больш бяспечнага дызайну, які дазваляе пазбегнуць такіх праблем, як уцечка інфармацыі па пабочных каналах і страта выпадковасці, за рахунак дастатковай прадукцыйнасці, каб функцыі бяспекі не адключаліся карыстальнікам, і за рахунак выбару лепшых крыптаграфічных прымітываў. Высокаўзроўневы «скрынкавы» API распрацаваны такім чынам, каб заахвочваць выкарыстанне аўтэнтыфікаванага шыфравання.

## Функцыі 
### Крыптаграфія з публічным ключом 
* , аўтэнтыфікаванае шыфраванне з публічным ключом. Узгадненне ключоў адбываецца праз X25519; шыфраванне выконваецца Salsa20-Poly1305.
* , скалярнае множанне на X25519. Гэтая функцыя можа быць выкарыстана для эліптычнай крывой Дыфі-Хеллмана.
* , подпісы з выкарыстаннем Ed25519 і SHA-512.

### Крыптаграфія з сакрэтным ключом 
* , шыфраванне з аўтэнтыфікацыяй па прыватным ключы з выкарыстаннем Salsa20-Poly1305.
* , шыфраванне з выкарыстаннем Salsa20, XSalsa20, ці AES.
* , аўтэнтыфікацыя з выкарыстаннем HMAC-SHA-512-256.
* , аўтэнтыфікацыя па адным паведамленні з выкарыстаннем Poly1305.

### Функцыі нізкага ўзроўню 
* , хэшаванне з выкарыстаннем SHA-512 ці SHA-256
* , параўнанне радкоў за бесперапынны час.

## Рэалізацыі 
Эталонная рэалізацыя напісана на C, часта з некалькімі ўбудаванымі асэмблерамі. C++ выкарыстоўваецца ў якасці абгорткі. Планавалася абгортка для Python, але яна не ўваходзіць у апошні рэліз (20110221). На хатняй старонцы, апошняя версія якой абнаўлялася ў 2016 годзе, згадваюцца прататыпы абгортак.

Эталонны NaCl мае мноства прывязак да моў праграмавання, такіх як PHP і Tcl.  &#x5B; '''' &#x5D;

### Libsodium 
Libsodium — гэта API-сумяшчальны форк эталоннага NaCl, створаны ў 2013 годзе. Ён з’яўляецца «усталёўваным і пакаваным», ці, іншымі словамі, можа быць скампіляваны ў дынамічную бібліятэку і ўсталяваны як праграмны пакет дзякуючы даданню файлаў зборкі (у NaCl іх не было). Ён таксама з’яўляецца «пераносным і крос-кампіляваным».

Паколькі libsodium можа быць дынамічна кампанаваны, ён служыць асновай для шэрагу звязкаў у такіх мовах, як Pharo,  Perl 5,  і Python.  

libsodium таксама пашырае API NaCl новымі алгарытмамі (напрыклад, BLAKE2, ChaCha20-Poly1305, AEGIS) і новымі класамі функцый (напрыклад, бяспечная памяць, генерацыя выпадковых лікаў, хэшаванне з кароткім уваходам, хэшаванне пароляў і выманне ключоў).

### TweetNaCl 
У 2013 годзе каманда NaCl і тры іншых выпусцілі TweetNaCl, скарочаную рэалізацыю 25 функцый NaCl, якая змяшчаецца ў 100 твітаў (140 сімвалаў кожны). 

TweetNaCl быў выкарыстаны ў якасці асновы для партоў, у тым ліку TweetNaCl.js і TweetNaCl-Java. Ён таксама быў перапісаны на падмностве SPARK Ada пад назвай SPARKNaCl, які аўтары апісваюць як «(у адрозненне ад TweetNaCl) чытэльны дзякуючы вялікай колькасці якія тлумачаць каментароў і кантрактаў у кодзе».

### Іншыя рэалізацыі 
* dryoc — чыстая бібліятэка крыптаграфіі Rust, якая рэалізуе API libsodium/NaCl з падтрымкай абароненай памяці.
* Monocypher —перапісаная на C версія NaCl. Імкнецца мець хуткасць даведачнага NaCl і памер TweetNaCl. 

## Гл. таксама 
* Выкарыстанне тэрміна соль у крыптаграфіі
* Параўнанне крыптаграфічных бібліятэк
* Спіс бясплатных і адкрытых праграмных пакетаў

## Спасылкі 
## Знешнія спасылкі 
* 
Катэгорыя:Праграмнае забеспячэнне, распрацаванае ў 2008 годзе
Катэгорыя:Крыптаграфічнае праграмнае забеспячэнне