Поле Галуа на Scala

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

Типи і обмеження
Для початку слід обговорити технічні проблеми пов'язані з поданням поліномів в пам'яті, з урахуванням розмірів типу Int у мові Scala. Вимоги сформульовані у списку нижче.
  • Тип Int Scala/Java має розмір 32 біта
  • можна Використовувати біти: 0..30 — 31, оскільки 32-ий біт є знаковим
  • Поліноми мають бути представлені числами в діапозоні 0..29
  • Непріводімие поліноми (або модулі) мають діапозон 1..30
  • Кінцеве поле має елементів


Реалізація
Спочатку опишемо клас Поліноміальні, який реалізує поліном і 4 операції.
Цей вид полінома є «напівфабрикатом» і не прив'язаний до кінцевого поля.

Читати далі →

Спеціальні прості числа допомагають пасивно прослухати протокол обміну ключами Діффі-Хеллмана


Слайд з презентації АНБ

В 2013 році завдяки Едварду Сноудену у ЗМІ потрапили документи АНБ. Серед них — замилений слайд презентації, який вказував на можливості АНБ розшифровці трафіку VPN. У АНБ не було причин брехати в засекреченої презентації, так що фахівці сприйняли цю інформацію як свідчення наявності якоїсь фундаментальної уразливості в сучасних системах криптографії з відкритим ключем.

Читати далі →