Автор Мадлен Прамоедя, стажер Zero One Group (ZOG)

ZOG недавно запустил серию своих блогов для стажеров, в которых рассказывается об опыте летних стажеров в различных подразделениях. В этой серии стажеры обсуждают, чему они научились и как ZOG готовит их к работе.

Добро пожаловать во вторую часть моего путешествия, где я буду писать о своем опыте использования Git в качестве системы контроля версий и экспериментировать с GPG и асимметричной криптографией для шифрования и дешифрования сообщений. Часть 1 моего путешествия вы можете прочитать здесь.

Поскольку я специализируюсь в области биохимии, участие в программе стажировки ZOG в течение последних нескольких месяцев заставило меня развить необходимые ИТ-навыки и стать новоиспеченным инженером. Надеюсь, вам понравится опыт обучения, описанный в этом посте, так же, как и мне, когда я это делал!

Контроль версий и Git более подробно

Контроль версий - это система, которая записывает изменения в файл или группу файлов, чтобы пользователь мог позже получить доступ к определенным версиям файла. Одна из таких систем - Git, которую я учился использовать и понимать на этой неделе. Сессия MIT Missing Semester по управлению версиями очень помогла мне познакомиться с основными командами Git. Эти команды включают:

С помощью этих команд я могу выполнять основы с помощью Git, но для меня было гораздо полезнее иметь возможность визуализировать модель данных. Для этого я использовал обучающий сайт под названием Learn Git Branching. Вы можете увидеть, как модель развивается по мере того, как вы вносите изменения в репозиторий. Например, ниже вы можете увидеть, что происходит с моделью, когда передается команда git commit, формируется новая фиксация (в данном случае представленная кружками).

Команда выполнена:

$ git commit

Что произойдет, если вы сделаете коммит дважды?

Переданных команд:

$ git commit
$ git commit

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

Что произойдет, если вы создадите новую ветку и начнете коммитить?

Переданных команд:

$ git checkout -b bugFix
$ git commit
$ git checkout Master
$ git commit

Здесь мне пришлось проверить мастер, чтобы переключиться обратно на ветвь Master перед фиксацией в этой ветке. Движение обозначается знаком *, который представляет «Голову», которая является указателем, указывающим на последнюю сделанную фиксацию или проверку. Ветвление обычно используется во время разработки программного обеспечения для внесения изменений в определенную версию файла, позволяя другим людям вносить различные изменения в отдельную ветку. Эти изменения обычно представляют собой добавление новой функции или исправление ошибки.

Как теперь слить ветку:

Переданных команд:

$ git merge bugFix

Безопасность и криптография

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

E = log2 (RL)

Где E = энтропия пароля

R = набор уникальных символов

L = количество символов в пароле

Удивительно, но пароль типа correctorhorsebatterystaple содержит больше бит энтропии (117), чем пароль типа rg8Ql34g (46). С точки зрения того, сколько бит энтропии считается достаточным, для онлайн-угадывания пароля с примерно 40 битами энтропии считается нормальным. Однако, чтобы также быть устойчивым к предположениям в автономном режиме, требуется более высокая энтропия, около 80 бит энтропии или более. Это связано с наличием метода атаки по словарю, который представляет собой метод взлома паролей с использованием хорошо известных слов или фраз. Таким образом, с помощью этого метода можно взломать даже правильный шнур для лошадиных аккумуляторов.

GPG и асимметричная криптография

Что касается криптографии, я потратил некоторое время на изучение асимметричной криптографии, в частности. Я установил GPG, что означает GNU Private Guard, которая представляет собой реализацию криптографии с открытым ключом. Это обеспечивает безопасную связь между двумя сторонами, а также позволяет каждой стороне проверять, пришло ли полученное сообщение от предполагаемого источника. Теоретически этапы шифрования и дешифрования разделены на отдельные процессы. Открытый ключ используется для шифрования, а закрытый или секретный ключ используется для дешифрования. Таким образом, это делает безопасным передачу открытого ключа другим, пока защищен закрытый ключ. В сценарии, когда два человека пытаются отправить друг другу зашифрованные документы, у каждого человека будет как открытый ключ другого человека, так и свой собственный закрытый ключ.

На этом этапе я действительно решил попробовать это со своим другом. Это был наш процесс:

  1. Сначала мы установили GPG, а затем сгенерировали нашу пару открытого и закрытого ключей с помощью команды: gpg - gen key в терминале.
  2. Затем мы также создали сертификат отзыва, чтобы иметь возможность деактивировать наши ключи в случае нарушения безопасности. Для этого мы использовали эту команду: gpg - output ~ / revocation.crt - gen-revoke [email protected]
  3. Мы ограничили права доступа к этому файлу, используя: chmod 600 ~ / revocation.crt, а затем сохранили копию сертификата отзыва с наших компьютеров в безопасном месте.
  4. Чтобы отправить друг другу наши открытые ключи, мы сначала экспортировали наши открытые ключи в текстовый файл и отправили этот файл друг другу. Затем мы импортировали этот файл с помощью команды: gpg - import name_of_pub_key_file
  5. После импорта мы должны подтвердить личность друг друга, подписав полученный ключ. Это было сделано с помощью: gpg - sign-key [email protected]
  6. Мы отправили подписанные ключи друг другу, поэтому, если кто-то доверяет моему другу и видит, что она подписала мой ключ, они с большей вероятностью будут доверять и мне. Выполнено с использованием: gpg - output ~ / signed.key - export - armor [email protected] и gpg - import ~ / signed.key для импорта
  7. Чтобы зашифровать сообщение, мы использовали: gpg - encrypt - sign - armor -r [email protected] name_of_file, а затем отправили зашифрованный файл друг другу.
  8. Для расшифровки сообщения мы использовали: gpg имя_файла.asc

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

Подходящий пик для третьей части моего путешествия

На следующей неделе я расскажу о своем опыте настройки текстового редактора (neovim) для эффективной работы с Python. Я объясню процесс шаг за шагом, а также изучу установку различных подключаемых модулей vim, которые могут быть полезны.

Будьте на связи!

Подписывайтесь на группу Zero One в Instagram, Twitter, Facebook и LinkedIn. Посетите наш сайт www.zero-one-group.com