Автор Тема: Криптографска библиотека  (Прочетена 4708 пъти)

4096bits

  • Участник
  • *****
  • Публикации: 3178
    • Профил
Криптографска библиотека
« -: Мар 20, 2016, 22:19 »
Какво да използвам за криптиране на комуникация по мрежата? Става въпрос за python-ки код. Одеве попаднах на nacl, но понеже не съм се занимавал никога с криптография, та се чудя, какво да използвам.
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

gat3way

  • Участник
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Криптографска библиотека
« Отговор #1 -: Мар 21, 2016, 00:40 »
Това би трябвало да е от предпоследните въпроси, няма особено значение каква библиотека използваш, далеч по-важно е какво ще правиш.

Грубо казано, представи си че трябва да окабелиш някоя сграда и да сложиш там суичове, рутери и аксес пойнтове, еквивалентният въпрос би бил каква марка кримпвачка да ползваш.

Активен

"Knowledge is power" - France is Bacon

4096bits

  • Участник
  • *****
  • Публикации: 3178
    • Профил
Re: Криптографска библиотека
« Отговор #2 -: Мар 21, 2016, 04:34 »
Ам, нищо особено. Комуникация между клиент и сървър, две или повече приложения. Може би и през интернет.
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

gat3way

  • Участник
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Криптографска библиотека
« Отговор #3 -: Мар 21, 2016, 12:34 »
Че това си е доста. Например откъде ще се взема ключа за криптирането. Само конфиденциалността ли е цел, интегритета на данните важен ли е, някаква форма на автентикация между двете страни ще има ли или те ще си вярват една на друга по подразбиране - тези неща не са нищо особено.
Активен

"Knowledge is power" - France is Bacon

4096bits

  • Участник
  • *****
  • Публикации: 3178
    • Профил
Re: Криптографска библиотека
« Отговор #4 -: Мар 21, 2016, 13:52 »
Защита на комуникация. Нещо ми се въртеше в главата, да се генерира частния и публичния ключ от едната страна, да се изпрати публичния ключ на другата страна и тя да генерира също частен и публичен и да върне собствения публичен, криптиран с получения преди това от първия адрес ключ. Ама колко работи и какво криптиране да ползвам не ми е ясно. Нещо като сървър клиент. И евентуално комуникация само между "клиенти", без сървър. Може и повече от два броя да са. Или симетрично криптиране?
« Последна редакция: Мар 21, 2016, 13:56 от 4096bits »
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

gat3way

  • Участник
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Криптографска библиотека
« Отговор #5 -: Мар 21, 2016, 14:22 »
Ми тя такава схема би била податлива на MitM атака - примерно аз стоя по средата и първоначално раздавам на двете страни моя публичен ключ, вместо да им препредам публичните ключове които са изпратили - оттам нататък всичко което минава като комуникация ще мога да го декриптирам. Всъщност, ще мога дори да криптирам каквото ми изнася с моя частен ключ и да го предам нататък, вместо да препредам оригиналното съобщение, то ще си изглежда съвсем легитимно.
Активен

"Knowledge is power" - France is Bacon

geroy

  • Участник
  • *****
  • Публикации: 198
  • Distribution: Windows, NetBSD, Devuan
    • Профил
    • WWW
Re: Криптографска библиотека
« Отговор #6 -: Мар 21, 2016, 14:28 »
Пробвай го NACL, уж е по дизайн направена да се избегнат по-голямата част от грешките от програмисти. Имаше и python библиотеки - pynacl (по спомени говоря)
Активен

4096bits

  • Участник
  • *****
  • Публикации: 3178
    • Профил
Re: Криптографска библиотека
« Отговор #7 -: Мар 21, 2016, 16:24 »
Аз и за тази питах в самото начало, но понеже преди десетина дена разбрах окончателно, какво е частен и публичен ключ и как работи изобщо тази асинхронна крипто щуротия, питам за съвет, ако някой се е занимавал. Та асинхронно криптиране или синхронно да гледам? И по-важно ми е, кое от всичките видове може да дате някаква по-сносна сигурност. Че доколкото разбрах, някои вече се смятат за не дотам надеждни.
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

geroy

  • Участник
  • *****
  • Публикации: 198
  • Distribution: Windows, NetBSD, Devuan
    • Профил
    • WWW
Re: Криптографска библиотека
« Отговор #8 -: Мар 21, 2016, 16:56 »
Ето ти за libnacl elliptic curves лекцията - https://www.youtube.com/watch?v=l6jTFxQaUJA
Активен

programings

  • Участник
  • *****
  • Публикации: 181
  • Distribution: Arch Linux, BunsenLabs Linux, FreeBSD
  • Window Manager: XFCE, MATE, Openbox
    • Профил
Re: Криптографска библиотека
« Отговор #9 -: Мар 21, 2016, 23:11 »
А защо не Diffie-Hellman с нещо като Station-to-Station протокола и сертификати?

Така имаш ephemeral ключове, съответно perfect forward secrecy (компрометирането на частния ключ на една от страните не води до осуетяване на цялата предишна комуникация), пък и защита от MitM.

Не знам обаче има ли готови решения.
« Последна редакция: Мар 21, 2016, 23:32 от programings »
Активен

gat3way

  • Участник
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Криптографска библиотека
« Отговор #10 -: Мар 22, 2016, 00:15 »
Diffie-Hellman без значение дали е с фиксирана или с ефемерна публична стойност, по дефиниция е податлив на mitm атаки, т.е ако някой стои между двете страни няма никакъв проблем да представи собствена публична стойност, сметките да минат и да сдоговорят с двете страни два, макар и различни, но известни на атакуващият сесийни ключове.

Сега ако въпроса е защо след като е уязвим въпреки всичко се ползва в TLS или SSH протоколите примерно, това е защото не се ползва само DH, малката тайна е че сървъра там подписва публичната си стойност и клиентът проверява сигнатурата, при това положение няма как някой по средата да мами. Обаче това вече влачи и последствията като например нуждата клиента да има налични публични ключове (или сертификати) срещу които да проверява дали това отсреща е сървъра с който иска да си говори или не, и тези трябва по някакъв сигурен канал да му бъдат доставени. В случаят с SSH това обикновено не се случва (първият път когато се връзваш ти се вади fingerprint-а на сървърния ключ и ако искаш връзваш, ако не искаш - не - но ако вържеш оттам нататък се помни и при промяна реве). Сега обаче в 99.999% от случаите на никой не му пука да проверява това, което е разбираемо - излишна параноя, а човек бърза да си свърши работата в крайна сметка.


Та както и да е - оттук и идея - няма ли да е далеч по-лесно да ползваш готова (и доказана) TLS имплементация, вместо сам да си измисляш криптосистема (което не е лесно и е твърде вероятно да се оплеска) ? С PyOpenSSL примерно не е толкова сложно, има и примери из нета. "Стандартната" ssl библиотека на питон е дори още по-лесна за ползване, единствено не дава достъп до разни неща, които с много голяма вероятност изобщо няма да ти трябват.
Активен

"Knowledge is power" - France is Bacon

programings

  • Участник
  • *****
  • Публикации: 181
  • Distribution: Arch Linux, BunsenLabs Linux, FreeBSD
  • Window Manager: XFCE, MATE, Openbox
    • Профил
Re: Криптографска библиотека
« Отговор #11 -: Мар 22, 2016, 01:46 »
А не можем ли да разменим сертификатите в самия процес на DH handshake-а?

Код:
(1) Alice → Bob : gx
(2) Alice ← Bob : gy, CertB, EK(SB(gy, gx))
(3) Alice → Bob : CertA, EK(SA(gx, gy))

Където EK е крпиптираната (с вече установения чрез DH ключ) сигнатура на двата експонента, разписана с private key-я на съответната страна.

Човекът по средата няма какво да направи, защото дори и сертификатът да е самоподписан и да го смени със свой, EK(SB(експоненти)) са разписани с частен ключ, кореспондиращият на който публичен няма да е този в подменения сертификат на атакуващия.
Активен

gat3way

  • Участник
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Криптографска библиотека
« Отговор #12 -: Мар 22, 2016, 02:49 »
Ми ти на 2) нямаш вече установен чрез DH ключ. В смисъл кой ти е казал че е установен, аз поне не бих се съгласил особено в mitm сценария.
Активен

"Knowledge is power" - France is Bacon

4096bits

  • Участник
  • *****
  • Публикации: 3178
    • Профил
Re: Криптографска библиотека
« Отговор #13 -: Мар 22, 2016, 13:33 »
Малко сложно почнахте да ми говорите. Интересува ме основно следното. Как да разменям съобщения между два адреса в локална или интернет. Та било клиент/сървър или просто между два и повече клиенти. Програмите да си общуват една друга. Питах, коя библиотека и какво криптиране да ползвам, които да са относително сигурни. А връзката почти сигурно ще върви по ssl, ssh или там, каквото ще да е. Но в случай, че се счупи, да не лъснат данните дето хвърчат в "прав текст", а да му се наложи на някой години да хвърля камъни, преди да слупи криптирането.
То връзката между клиентите или сървъра и клиентите лесно да се направи и си играх тук. От тук нататък не зная, коя точно от всички крипто-магии да порбвам да вмъкна помежду трафика.
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

growchie

  • Участник
  • *****
  • Публикации: 621
    • Профил
Re: Криптографска библиотека
« Отговор #14 -: Мар 23, 2016, 22:26 »
Имам един познат, който бачка за mega.nz. Та той твърди, че те бягат като дявол от тамян от openssl. Предпочитат gnutls или libressl. М-у другото освен файлове, се занимават и с криптиран чат и видео. Може да ги потърсиш в github-а. Пуснали са си целия сайт FLOSS. meganz им е акаунта там.
Активен