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

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

@webware

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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




[ 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=

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

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

Base32.

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

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




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()
И вот что вышло



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


Источник codeby.net

Report Page