[Начинающим] - Криптография. Введение.
@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 бит информации.
В терминале используется аналогично предыдущему.
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