1

Тема: Шлях на криптографічну вершину

Отже, взявшись за одну цікаву справу, мушу визнати, що мені поки що бракує знань та досвіду в криптографії.

Якщо конкретніше, проблема стосується механізму підтвердження автентичності користувача. Поки що я це уявляю приблизно таким чином:

Нехай у нас є служба автентифікації (СА), сторонні сайти (С1, С2 і т.д.), користувачі (К1, К2 і т.д.). Кожен з користувачів має свій обліковий запис на форумі (Ф). СА може пересилати будь-кому з користувачів повідомлення, які інші користувачі не бачитимуть (вважатимемо, що ПП на форумі є каналом зв'язку, достатньо надійним для цього).

Кожен сайт отримує від СА свій індивідуальний відкритий ідентифікатор сайту (ІС) та секретний код (СК) (які СА заносить у себе в таблицю ІС:СК).

Якщо користувач К1 пише на сайті С1 повідомлення від свого імені, то після цього С1 передає до СА (безпосередньо чи через користувача) наступні дані: ІС, ім'я користувача (ІК), ідентифікатор входу (ІВ — в ролі якого може виступати дата й час входу користувача, номер повідомлення тощо). Отримавши ІС, ІК та ІВ, служба автентифікації знаходить у себе в таблиці СК, що відповідає заданому ІС, й на основі СК, ІК та ІВ генерує хеш-суму Х (напр., за алгоритмом md5 або sha-3).

Далі СА пересилає користувачеві з заданим ім'ям форумне приватне повідомлення з посиланням для входу, яке веде на сайт С1 і містить ІС, ІК, ІВ та Х. При переході за цим посиланням, сайт С1 обчислює хеш-суму на основі СК, ІК та ІВ за тим же алгоритмом, що й СА. Якщо хеш-суми збігаються, сайт вважає, що користувач є тим, за кого себе видає, і його вхід підтверджується.

Отже, які є очевидні недоліки в цій послідовності дій, які я поки що не бачу? Якщо ви зловмисник, що намагається розмістити на сайті повідомлення від імені іншого користувача, то якою буде ваша послідовність дій?

py -3 -m pip install git+https://github.com/snoack/python-goto
Подякували: 0xDADA11C7, 221VOLT, ostap34PHP3

2

Re: Шлях на криптографічну вершину

Декілька років тому писав щось подібне.. це був типу сервіс авторизації для інших сайтів через мій. Хоча те що ви хочете зробити, трохи інше.

На рахунок ось цього..
> Якщо хеш-суми збігаються, сайт вважає, що користувач є тим, за кого себе видає, і його вхід підтверджується.

Це не зпрацює, якщо користувач С1 змінить наприклад своє IK і хеші (СА і С1) будуть різними.
Достатьно передати статичні (унікальні) дані, як IC (ключ для C1) та ID (id користувача в C1)

Подякували: P.Y., 221VOLT2

3

Re: Шлях на криптографічну вершину

Зазвичай використовують пару Відкритий/Закритий ключ, яка є унікальною, і не подібною на мільйони інших пар. Закритий ключ дозволяє зашифрувати деяку інформацію, а розшифрувати її можна тільки його парним відкритим ключем. Під час реєстрації користувач завантажує на форум свій відкритий ключ. А коли потім він хоче написати повідомлення, то додатково до повідомлення генерує хеш суму і шифрує її своїм закритим ключем. Форум розшифровує хеш, звіряє його з реальним хешем повідомлення, і якщо усе збіглося, то повідомлення автентичне. Закритий ключ можна зберігати і на сервері служби автентифікації (СА). Тоді для доступу до форуму треба буде знати лише пароль до СА. А самому форуму треба буде звернутися до СА лише під час реєстрації нового користувача, для отримання відкритого ключа.

Подякували: P.Y., 221VOLT2

4

Re: Шлях на криптографічну вершину

Torbins написав:

Зазвичай використовують пару Відкритий/Закритий ключ, яка є унікальною, і не подібною на мільйони інших пар. Закритий ключ дозволяє зашифрувати деяку інформацію, а розшифрувати її можна тільки його парним відкритим ключем.

Теж думав у цьому напрямку (зокрема, це звільнило б від необхідності зберігати базу секретних ключів для кожного сайту).

Які алгоритми цього типу зараз актуальні?

py -3 -m pip install git+https://github.com/snoack/python-goto
Подякували: 221VOLT1

5 Востаннє редагувалося Torbins (05.06.2017 18:12:01)

Re: Шлях на криптографічну вершину

Найпопулярніший зараз AES. Він реалізований в сучасних процесорах, тому дуже швидкий. Хоча є й українські розробки у вигляді ДСТУ 4145-2002.

P.S. Схоже я переплутав, і ключ для розшифровки має бути закритим, а відкритим - ключ для шифровки. Хоча це може залежати від потреб.

Подякували: P.Y., 221VOLT2

6 Востаннє редагувалося iovchynnikov (05.06.2017 23:03:33)

Re: Шлях на криптографічну вершину

Кілька разів прочитав перший допис але так і не зрозумів до чого тут криптографія.

Все що Вам треба - як я згадував у попередній темі, OAuth(2), та httpS. httpS виконає захист каналу зв'язку, а стандарт OAuth2 описує ефективний спосіб автентифікації та авторизації. OAuth2 достатньо гнучний щоб Ви могли імплементувати навіть таку збочену ідею з ПП яку Ви описали, при тому інші сервіси буду мати все той самий стандарт, зрозумілий десяткам популярних бібіотек від Spring Security до 100500 ліб на JS.

Я вже згадував, що навіть якщо Ви заімплементуєте "Replace Auth Api", то кількість його користувачів буде трохи більша ніж 0, але якщо Ви ще зробите MyAwesomeCryptoAuth, маю сумніви що хтось захоче використовувати нову милицю, коли де факто стандарт OAuth2. Академічна цінність теж 0, бо "Cryptography is not something you should try to invent or design yourself", що стосуєтся також і алгоритмів автентифікації та авторизації.

Все вже вигадали до Вас.

Подякували: koala, P.Y., 221VOLT3

7

Re: Шлях на криптографічну вершину

Torbins написав:

P.S. Схоже я переплутав, і ключ для розшифровки має бути закритим, а відкритим - ключ для шифровки. Хоча це може залежати від потреб.

По-моєму, можливі обидва варіанти:
а) сайт генерує користувачеві перевірочний код, який в незашифрованому вигляді передається на СА, де шифрується закритим ключем і повертається через посилання в ПП назад на сайт. Якщо зашифрований перевірочний код можна правильно розшифрувати відкритим ключем, вхід користувача підтверджено.
б) сайт генерує перевірочний код, шифрує його відкритим ключем і передає на СА, де він розшифровується й передається через посилання в ПП назад на сайт. Якщо отриманий перевірочний код збігається з початковим, вхід користувача підтверджено.

Який із них вибрати — очевидно, залежить від можливостей конкретного криптографічного алгоритму. Наприклад, якщо шифрувальний і розшифровувальний ключі не виводяться один з одного, то будь-який з них можна зробити відкритим. Якщо ж один із них виводиться з іншого (або можна легко підібрати другий ключ до нього), то початковий ключ має бути закритим, а похідний від нього — відкритим. А як воно насправді (наприклад, у тому ж AES)?

py -3 -m pip install git+https://github.com/snoack/python-goto
Подякували: 221VOLT1

8

Re: Шлях на криптографічну вершину

AES це симетричний алгоритм, тому ключ один. RSA послуговується парою ключів - закритим і відкритим. Я на криптолокерах собаку з'їв, тому скажу так -- AES використовують тільки через швидкість алгоритму, тобто, напиклад, в HTTPS асиметричним алгоритмом шифрують лише симетричний ключ -- ключ сесії з'єднання. А як воно вже з'єднається і домовиться про ключі, то лише симетричним лайном шифрує.

Теж думав у цьому напрямку (зокрема, це звільнило б від необхідності зберігати базу секретних ключів для кожного сайту).

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

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»
Подякували: P.Y., 221VOLT2

9

Re: Шлях на криптографічну вершину

iovchynnikov написав:

Я вже згадував, що навіть якщо Ви заімплементуєте "Replace Auth Api", то кількість його користувачів буде трохи більша ніж 0, але якщо Ви ще зробите MyAwesomeCryptoAuth, маю сумніви що хтось захоче використовувати нову милицю, коли де факто стандарт OAuth2. Академічна цінність теж 0, бо "Cryptography is not something you should try to invent or design yourself", що стосуєтся також і алгоритмів автентифікації та авторизації.

Все вже вигадали до Вас.

Угу, TOR, I2P, RetroShare, ZeroNet це мабуть від хорошого життя й поточні алгоритми безпеки всіх влаштовують, тож хай дитинка бавиться - хоч з азами й термінологією ознайомиться і вумні статті перекладати зможе.

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»
Подякували: 221VOLT1

10

Re: Шлях на криптографічну вершину

iovchynnikov написав:

Кілька разів прочитав перший допис але так і не зрозумів до чого тут криптографія.

Все що Вам треба - як я згадував у попередній темі, OAuth(2), та httpS. httpS виконає захист каналу зв'язку, а стандарт OAuth2 описує ефективний спосіб автентифікації та авторизації. OAuth2 достатньо гнучний щоб Ви могли імплементувати навіть таку збочену ідею з ПП яку Ви описали, при тому інші сервіси буду мати все той самий стандарт, зрозумілий десяткам популярних бібіотек від Spring Security до 100500 ліб на JS.

Я вже згадував, що навіть якщо Ви заімплементуєте "Replace Auth Api", то кількість його користувачів буде трохи більша ніж 0, але якщо Ви ще зробите MyAwesomeCryptoAuth, маю сумніви що хтось захоче використовувати нову милицю, коли де факто стандарт OAuth2. Академічна цінність теж 0, бо "Cryptography is not something you should try to invent or design yourself", що стосуєтся також і алгоритмів автентифікації та авторизації.

Все вже вигадали до Вас.

доречі, мене також цікавить OAuth/OAuth2,
уже хотів створювати нову тему, та потрапив на оцю, тому напишу тут

люди добрі, скиньте будь-ласка почитати про OAuth, яка різниця між OAuth та OAuth2,
цікавить як звязати власні мікросервіси по власному OAuth,
тільки не англійською)) дякую

Це ще не кінець. Це навіть не початок кінця. Але, можливо, це кінець початку.
Зростання мудрості можна точно вимірювати ступенем зменшення злоби.

https://coderhero.win/ Розбудовуємо інтернет разом!
Подякували: P.Y.1

11

Re: Шлях на криптографічну вершину

0xDADA11C7 написав:
iovchynnikov написав:

Я вже згадував, що навіть якщо Ви заімплементуєте "Replace Auth Api", то кількість його користувачів буде трохи більша ніж 0, але якщо Ви ще зробите MyAwesomeCryptoAuth, маю сумніви що хтось захоче використовувати нову милицю, коли де факто стандарт OAuth2. Академічна цінність теж 0, бо "Cryptography is not something you should try to invent or design yourself", що стосуєтся також і алгоритмів автентифікації та авторизації.

Все вже вигадали до Вас.

Угу, TOR, I2P, RetroShare, ZeroNet це мабуть від хорошого життя й поточні алгоритми безпеки всіх влаштовують, тож хай дитинка бавиться - хоч з азами й термінологією ознайомиться і вумні статті перекладати зможе.

Так може нагадаєте що з цього вигадало нові криптоалгоритми? Чи може винайшло P2P?

12

Re: Шлях на криптографічну вершину

221VOLT написав:

тільки не англійською))

Українською не знайшов :(

13

Re: Шлях на криптографічну вершину

А хоча б англійською — що порадите почитати для швидкого входу в тему?

py -3 -m pip install git+https://github.com/snoack/python-goto

14

Re: Шлях на криптографічну вершину

Талмуд Schneier, Bruce. Applied Cryptography

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»
Подякували: P.Y.1

15 Востаннє редагувалося P.Y. (06.06.2017 14:03:34)

Re: Шлях на криптографічну вершину

0xDADA11C7 написав:

Талмуд Schneier, Bruce. Applied Cryptography

Почав читати ще до створення цієї теми. Але там більше загальної теорії, корисної для розуміння, як працюють криптоалгоритми. Тоді як мене цікавить також і контекст сучасних актуальних технологій — що ховається за тією чи іншою назвою алгоритму, як їх правильно використовувати, яких типових помилок слід уникнути, приклади коду, і т.п. Очевидно, що для своєї прикладної задачі я не буду винаходити свій алгоритм шифрування, а спробую застосувати те, що вже реалізовано до мене і є в загальнодоступних бібліотеках.

Р.Ѕ. Неуважно читав — здається, там таки є все, що мене цікавить. Але pdf без навігації — ні внутрішніх посилань, ні змісту/закладок, ні навіть нумерації сторінок — дивлюсь і не бачу, що в мене перед носом *WALL*

py -3 -m pip install git+https://github.com/snoack/python-goto
Подякували: 0xDADA11C71

16 Востаннє редагувалося iovchynnikov (06.06.2017 14:51:54)

Re: Шлях на криптографічну вершину

З крипто гарні курси на корсеї: https://www.coursera.org/learn/crypto & https://www.coursera.org/learn/crypto2. Це академічний курс, але він досить "по суті" + практичні поради. Якщо вам треба розуміння на рівні "срали мазали" то просто погугліть конкретні алгоритми шифрування + зрозумійте різницю між симетр/асиметр шифруванням https://www.owasp.org/index.php/Guide_to_Cryptography

З OAuth2 у мене в закладках: http://www.bubblecode.net/en/2016/01/22 … ng-oauth2/ та https://aaronparecki.com/oauth-2-simplified/

Подякували: P.Y., 0xDADA11C7, 221VOLT3

17

Re: Шлях на криптографічну вершину

На чому ви зупинилися і чи продовжуєте ви шлях на криптографічну вершину?

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»
Подякували: 221VOLT1

18

Re: Шлях на криптографічну вершину

P.Y. написав:

Отже, взявшись за одну цікаву справу, мушу визнати, що мені поки що бракує знань та досвіду в криптографії.

Якщо конкретніше, проблема стосується механізму підтвердження автентичності користувача. Поки що я це уявляю приблизно таким чином:

Нехай у нас є служба автентифікації (СА), сторонні сайти (С1, С2 і т.д.), користувачі (К1, К2 і т.д.). Кожен з користувачів має свій обліковий запис на форумі (Ф). СА може пересилати будь-кому з користувачів повідомлення, які інші користувачі не бачитимуть (вважатимемо, що ПП на форумі є каналом зв'язку, достатньо надійним для цього).

Кожен сайт отримує від СА свій індивідуальний відкритий ідентифікатор сайту (ІС) та секретний код (СК) (які СА заносить у себе в таблицю ІС:СК).

Якщо користувач К1 пише на сайті С1 повідомлення від свого імені, то після цього С1 передає до СА (безпосередньо чи через користувача) наступні дані: ІС, ім'я користувача (ІК), ідентифікатор входу (ІВ — в ролі якого може виступати дата й час входу користувача, номер повідомлення тощо). Отримавши ІС, ІК та ІВ, служба автентифікації знаходить у себе в таблиці СК, що відповідає заданому ІС, й на основі СК, ІК та ІВ генерує хеш-суму Х (напр., за алгоритмом md5 або sha-3).

Далі СА пересилає користувачеві з заданим ім'ям форумне приватне повідомлення з посиланням для входу, яке веде на сайт С1 і містить ІС, ІК, ІВ та Х. При переході за цим посиланням, сайт С1 обчислює хеш-суму на основі СК, ІК та ІВ за тим же алгоритмом, що й СА. Якщо хеш-суми збігаються, сайт вважає, що користувач є тим, за кого себе видає, і його вхід підтверджується.

Отже, які є очевидні недоліки в цій послідовності дій, які я поки що не бачу? Якщо ви зловмисник, що намагається розмістити на сайті повідомлення від імені іншого користувача, то якою буде ваша послідовність дій?

То це ви вдосканалили систему криптування ФС, у пеці2017 ?

19

Re: Шлях на криптографічну вершину

А тим часом хтось досягнув криптографічної вершини.

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ
Подякували: 0xDADA11C71

20

Re: Шлях на криптографічну вершину

Хочете сказати, топікстартер, замість клепати свій мегапроект з шифруванням даних, сам десь шифрується? ))

py -3 -m pip install git+https://github.com/snoack/python-goto