Статья [Начинающим] - Криптография. Введение.

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

-------------------------------------------------------------------------------------------------

[1] - Что изучает криптография.

Если говорить простыми словами, то
Криптография - наука изучающая методы обеспечения безопасности информации.

А если более заморочено, то wikipedia говорит нам:
Криптография - наука о методах обеспечения конфеденциальности(невозможности прочтения информации посторонним), целостности данных (невозможности незаметного изменения информации), аутентификации(проверки подлинности авторства или иных свойств объекта), а также невозможности отказа от авторства.

Это невероятная наука которая на самом деле существует вот уже несколько тысяч лет. Мы живем в мире обетованом безграничным количеством информации. В этом мире есть и люди, жадно впитывающие в себя всю информацию. Так вот криптография защитит нас от опасности раскрытия конфеденциальных данных.

В основном криптография занимается изучением методов шифрования информации, разробатывая для этого различные алгоритмы(с некоторыми из них мы сегодня познакомимся).


[2] - Где вам оно понадобится.

Криптография очень пригодна ИБ специалисту, т.к. за частую без нее никак)
Часто задания связаные с криптографией встречаются на CTF соревнованиях. Мы сегодня разберем малую часть таких заданий. В дальнейшем они будут все трудней. Чем выше в гору вы взберетесь, тем трудней вам будет.



[3] - Что такое шифрование и как оно осуществляется.

С шифрованием мы имеем дело повседневно. Когда мы находимся на веб ресурсе с протоколом https, когда разговариваем по телефону, говорим текст наоборот(редкие случаи:)), и все этому подобное..
Иными словами
Шифрование - кодирование информации с целью обеспечить конфеденциальность и защиту(чаще всего передоваемой информации).

Кодирование информации - это перевод информации для передачи, удобного хранения, обработки в удобную форму изпользуя некоторый код или алгоритм.

Декодирование - возвращение информации в нормальную(удобную) форму.

Познакомившись с новыми для некоторых определениями идем далее.
Шифрование информации происходит по определенному алгоритму. В использованном алгоритме часто используется ключь. Также ключь использует принемающая сторона, для дешифровки информации. Шифрование информации бывает симметричное и асимметричное.

[3.1] - Симметричное шифрование.

В симетричном шифровании используют один ключь. Этот ключь преднозначен для

  • Кодирования информации(в скором поймете зачем нужны ключи)
  • Декодирование информации.
Этот ключь должен быть как у отправителя, так и у получающей стороны.
symmetric_encryption_graphic_ru.png


[3.2] - Асимметричное шифрование.

Тут дела обстаят интересней. В асимметричном шифровании используют 2 ключа(публичный и закрытый).

Первый - для шифрации.
Второй - для дешифрации.

Эти ключи не должны быть одинаковы. Отсюда собственно и название - асимметричные. Для каждой стороны достаточно иметь и одного ключа.

asymmetric_encryption_graphic_ru.png



[4] - Кодируем информацию с base(64/32/16)

Не молодая кодировка base - алгоритм кодирования информации.
В чем отличия между 64/32/16? - А самое наиглавнейшее отличае в алгоритме. Там информация разделяется на группы. И в каждой кодировке base свое кол-во символов в одной группе. Поясняю.


Base64.

В алфавите a-z, A-Z, 0-9, ?, +. И так, всего в его алфавите 64 символа. Также, в конце шифрования может быть знак "=". Он появляется из-за лишнего нулевого байта. А связано это стем, что при кодировании алгоритм переводит сообщение в двоичную систему которую должен разделить на равные группы. Так вот при нехватке для полноты равенства добавляется 0.

Мы можем как закодировать так и декодировать информацию в base64 без использования ключа.
Откройте свой терминал *nix.
Для работы с этим алгоритмом нам потребуется инструмент который предустановлен в систему. Это base64)
Давайте закодируем сообщение "CoDeBy123"
Для этого запускаем base64.
Код:
base64
Далее пишем наш текст и зажимаем CTRL+D.
Получаем закодированное в base64 сообщение

Код:
Q29EZUJ5MTIzCgo=

2017_12_02_02.06.35-1-1-1.png

Также мы можем и декодировать, для этого пропишите
Код:
base64 -d
Далее пишем наше закодированное сообщение и жмем CTRL+D
2017_12_02_02.09.35-1.png

Или же для работы с алгоритмом кодирования base, можете воспользоватся какими-либо специальными ресурсами.

Base32.

Он не далек от base64, но отличен тем, что

  • В алфавите 32 символа. С A-Z(иногда a-z) и 2-7.
  • При приобразовании, делим на группы так, чтоб в каждой группе было по 5 бит информации.
В конце закодированого сообщения будут специальные символы(=), ситуация одинакова с base64.

В терминале используется аналогично предыдущему.

2017_12_02_02.21.06-1.png

2017_12_02_02.21.42-1.png


Base16.

Этот алгоритм "основан" на шеснадцатиричной системе и содержет в алфавите 16 символов. С A-F и 0-9
При кодировании весь алгоритм не меняется, разве что в группе по 4 бита.


А теперь предлогаю вам решить парочку заданий.

Задание 1.

Определите кодировку и расшифруйте сообщение ниже. Дешифрованый текст и есть ответ.
Код:
MZWGCZZAFUWT4ICNPFIGCU3TK5XVEZBVGQ3AUCQ=

Задание 2.

Какая из кодировок ниже является base64?
Код:
1. MJQXGZJTGIFA====
2. YmFzZTY0Cg==
3. 626173653634

[5] - Base в Python.

В Python имеется библиотека base64. В ней содержится много плюшек. В том числе и кодирование в base64/32/16

Давайте напишем простую программку которая будет кодировать/декодировать сообщение. Я набросал не много, это сильно автоматизирует действия.

Код:
import base64

bord = """

[1] - Encode
[2] - Decode

"""
print(bord)
my_input_one = input("--> ")

def decoder():
    x = input("Enter base --> ")
    my_input_two = input("Enter base(64/32/16) -> ")
    if my_input_two =="64":
        a = base64.b64decode(x.encode("utf-8"))
        print("Output --> ",a.decode("utf-8"))

    elif my_input_two == "32":
        a = base64.b32decode(x.encode("utf-8"))
        print("Output --> ",a.decode("utf-8"))

   elif my_input_two == "16":
        a = base64.b16decode(x.encode("utf-8"))
        print("Output --> ",a.decode("utf-8"))


def encoder():
    x = input("Enter text --> ")
    my_input_two = input("Enter base(64/32/16) -> ")
    if my_input_two =="64":
        a = base64.b64encode(x.encode("utf-8"))
        print("Output --> ",a.decode("utf-8"))

    elif my_input_two == "32":
        a = base64.b32encode(x.encode("utf-8"))
        print("Output --> ",a.decode("utf-8"))

   elif my_input_two == "16":
        a = base64.b16encode(x.encode("utf-8"))
        print("Output --> ", a.decode("utf-8"))

if my_input_one == "1":
    encoder()
elif my_input_one == "2":
    decoder()

И вот что вышло
2017_12_02_03.09.48-1.png

2017_12_02_03.10.23-1.png


До встречи в следующей части!

 

DaXik

One Level
21.09.2019
4
1
BIT
0
Статья несет очень полезную информацию. Спасибо огромное за статью, она заслуживает отметки "нравится", но прошу проверять текст на ошибки, перед ее выпуском. Еще раз спасибо.
 

ad3us

New member
09.04.2020
1
0
BIT
0
Автор, просто красава. Обьяснил все детально .Жду с нетерпением, следующую часть...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!