Симметричное шифрование

Недав­но мы нача­ли раз­го­вор о шиф­ро­ва­нии. Наша цель — напи­сать соб­ствен­ный шиф­ро­валь­щик. А для это­го нуж­но осво­ить несколь­ко важ­ных прин­ци­пов и алго­рит­мов. Нач­нем с сим­мет­рич­но­го шиф­ро­ва­ния, потом рас­смот­рим асим­мет­рич­ное и даль­ше всё слож­нее.

Принцип работы

Сим­мет­рич­ное шиф­ро­ва­ние рабо­та­ет так:

  1. Есть дан­ные, кото­рые нуж­но зашиф­ро­вать. 
  2. Есть ключ шиф­ро­ва­ния. С его помо­щью дан­ные шиф­ру­ют­ся по какому-то алго­рит­му.
  3. Тот, кто обла­да­ет клю­чом и зна­ет алго­ритм, может рас­шиф­ро­вать сооб­ще­ние
  4. Если не знать клю­ча, то рас­шиф­ро­вать дан­ные почти невоз­мож­но. Поче­му почти — рас­ска­жем в ста­тье про крип­то­стой­кость.

Сло­во «сим­мет­рич­ный» свя­за­но с тем, что для шиф­ро­ва­ния и рас­шиф­ров­ки нужен один и тот же ключ. Клю­чом может быть что угод­но: чис­ло, сло­во, фра­за, фраг­мент тек­ста или файл. Выбор клю­ча зави­сит от спо­со­ба шиф­ро­ва­ния, но общее пра­ви­ло в сим­мет­рич­ном шиф­ро­ва­нии такое: чем длин­нее ключ, тем слож­нее его взло­мать.

Алгоритмы шифрования

Сим­мет­рич­ное шиф­ро­ва­ние в общих чер­тах рабо­та­ет так:

  1. Берём ключ и дан­ные, кото­рые нуж­но зашиф­ро­вать.
  2. С помо­щью мате­ма­ти­че­ских функ­ций и пре­об­ра­зо­ва­ний мы соеди­ня­ем ключ и дан­ные. Напри­мер, берём каж­дый байт сооб­ще­ния, умно­жа­ем на чис­ло из клю­ча и полу­ча­ем новое чис­ло. Так дела­ем с каж­дым бай­том исход­но­го сооб­ще­ния и на выхо­де полу­ча­ем зашиф­ро­ван­ные дан­ные — мас­сив из цифр.
  3. Эти дан­ные мож­но пере­да­вать по любо­му кана­лу свя­зи. Даже если их пере­хва­тят, то без клю­ча всё рав­но не про­чи­та­ют.
  4. Полу­ча­тель берёт этот мас­сив из чисел, делит каж­дое на чис­ло из того же клю­ча и полу­ча­ет исход­ное сооб­ще­ние, кото­рое мож­но про­чи­тать. 

Если этот ключ будет знать кто-то ещё, то он тоже смо­жет читать и отправ­лять такие сооб­ще­ния. А если ключ узна­ют все, то пере­пис­ка пере­ста­нет быть сек­рет­ной.

👉 Пере­мно­же­ние — про­стой алго­ритм, кото­рый дав­но не исполь­зу­ет­ся в крип­то­гра­фии в чистом виде. Сей­час берут что-то намно­го более слож­ное: лога­риф­мы в конеч­ном про­стран­стве, фак­то­ри­за­цию и дру­гие мате­ма­ти­че­ские функ­ции.

Простой пример

Допу­стим, мы с дру­гом хотим орга­ни­зо­вать тай­ную пере­пис­ку. Для это­го мы выби­ра­ем чис­ло, кото­рое будет нашим сек­рет­ным клю­чом. Алго­ритм шиф­ро­ва­ния будет такой:

  1. Состав­ля­ем сооб­ще­ние на рус­ском язы­ке.
  2. Берём ключ (чис­ло) и сдви­га­ем все сим­во­лы в сооб­ще­нии на это чис­ло. Напри­мер, если ключ равен трём, то А (1-я пози­ция) сдви­га­ет­ся на три пози­ции даль­ше по алфа­ви­ту и пре­вра­ща­ет­ся в Г (4-я пози­ция), Л пре­вра­ща­ет­ся в О и так далее. Если при сдви­ге мы выхо­дим за гра­ни­цу алфа­ви­та, то воз­вра­ща­ем­ся в нача­ло алфа­ви­та и про­дол­жа­ем отсчёт отту­да.
  3. Таким спо­со­бом шиф­ру­ем всё сооб­ще­ние, бук­ва за бук­вой.
  4. Отда­ём шиф­ров­ку дру­гу.
  5. Он берёт каж­дый сим­вол и сдви­га­ет его на три пози­ции назад по алфа­ви­ту. В ито­ге у него все бук­вы вер­нут­ся на свои места и полу­чит­ся тот текст, кото­рый мы отправ­ля­ли.

Если взять ключ 10 и зашиф­ро­вать им фра­зу «При­вет, это жур­нал Код!», то полу­чит­ся так:

Щът­лоь, жьш рэъ­чйх Фшн!

Этот алго­ритм слиш­ком прост для совре­мен­ной крип­то­гра­фии, пото­му что взла­мы­ва­ет­ся почти момен­таль­но, но для игр в шпи­о­нов с детьми — самое то.

👉 Алго­ритм из наше­го при­ме­ра назы­ва­ет­ся шиф­ром Цеза­ря, пото­му что так рим­ский импе­ра­тор шиф­ро­вал важ­ные сооб­ще­ния сво­им гене­ра­лам.

Плюсы и минусы симметричного шифрования

Сим­мет­рич­ное шиф­ро­ва­ние рабо­та­ет очень быст­ро, пото­му что всё сво­дит­ся к про­стой мате­ма­ти­ке. А все мате­ма­ти­че­ские опе­ра­ции выпол­ня­ют­ся за несколь­ко про­цес­сор­ных так­тов, что даёт нам в сред­нем один-два мил­ли­ар­да таких дей­ствий в секун­ду. Даже если в алго­рит­ме сло­же­ние и умно­же­ние выпол­ня­ют­ся мил­ли­он раз, за секун­ду ком­пью­тер может выпол­нить тыся­чу таких алго­рит­мов по шиф­ро­ва­нию.

Един­ствен­ный минус сим­мет­рич­но­го шиф­ро­ва­ния — слож­ность пере­да­чи сек­рет­но­го клю­ча в самом нача­ле от одно­го участ­ни­ка к дру­го­му. Если ключ пере­дать по откры­то­му кана­лу свя­зи, его могут под­смот­реть и читать всю пере­пис­ку. А что­бы орга­ни­зо­вать закры­тый канал свя­зи, нужен ключ шиф­ро­ва­ния, кото­рый тоже нуж­но как-то пере­дать. Но если знать асим­мет­рич­ное шиф­ро­ва­ние, то и эту про­бле­му мож­но решить. Про асим­мет­рич­ное шиф­ро­ва­ние — в сле­ду­ю­щей ста­тье.

Симметричное шифрование в жизни

Почти всё обще­ние в совре­мен­ных мес­сен­дже­рах постро­е­но на сим­мет­рич­ном шиф­ро­ва­нии.

Все наши бан­ков­ские пла­те­жи, пере­во­ды и онлайн-оплата тоже шиф­ру­ет­ся сим­мет­рич­ным мето­дом. 

Когда мы ста­вим замок на дверь и даём ключ всем жиль­цам — это тоже сим­мет­рич­ное шиф­ро­ва­ние. Замок — это шифр, а ключ — это ключ рас­шиф­ров­ки. Если вста­вить не тот ключ, то ниче­го не про­изой­дёт. Открыть дверь мож­но толь­ко тем клю­чом, кото­рый был от это­го зам­ка, и сде­лать это может толь­ко тот, у кого есть этот ключ.

Любая защи­щён­ная линия свя­зи, от пра­ви­тель­ствен­ной до част­ной, исполь­зу­ет сим­мет­рич­ное шиф­ро­ва­ние.

Что дальше

Напи­шем свой алго­ритм сим­мет­рич­но­го шиф­ро­ва­ния, что­бы получ­ше разо­брать­ся в дета­лях. А потом пого­во­рим о крип­то­стой­ко­сти.

Текст:
Миша Поля­нин

Редак­тор:
Мак­сим Илья­хов

Кор­рек­тор:
Ира Михе­е­ва

Иллю­стра­тор:
Даня Бер­ков­ский

Вёрст­ка:
Маша Дро­но­ва

Достав­ка:
Олег Веш­кур­цев