1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
|
```sh
sudo su
apt install gpg
gpg —full-gen-key
# ставим 4096 бит
# 0 - ключ бессрочный
# y
# Real name: vlapa
# Email address: vlapa@ya.ru
# Comment: My Keys !
# o
# Passphrase: `xxxxxxxxxx`
# мышь, клавиатура
```
```sh
echo "keyid-format 0xlong
> throw-keyids
> no-emit-version
> no-comments" > ~/.gnupg/gpg.conf
gpg -k - публичный ключ
gpg -K - приватный ключ
cd /tmp
echo "Hello World !" > /tmp/file.txt
ls
file.txt
cat file.txt
Hello World !
# шифруем:
gpg -e -a -r vlapa@ya.ru file.txt
# расшифровываем:
gpg -d -o file.txt file.txt.asc
========================================
# экспортируем:
gpg —export -a vlapa@ya.ru > pubkey.gpg
gpg —export-secret-key -a vlapa@ya.ru > seckey.gpg
# Удаляем:
gpg —delete-secret-keys vlapa@ya.ru
gpg —delete-keys vlapa@ya.ru
# импортируем:
gpg —import pubkey.gpg
gpg —import seckey.gpg
# делаем доверенным:
gpg --edit-key <email_при_создании_ключа>
# - trust
# - 5
# - Y
# - quit
# Если нужно изменить пароль GPG-ключа (не содержимое записи)
# Если вы сменили пароль самого GPG-ключа, но `pass` по-прежнему запрашивает старый, выполните:
gpg --edit-key "Ваше_имя_или_email"
# Затем в интерактивном меню введите:
passwd
save
# Где найти имя ключа?
# Посмотрите в файле:
~/.password-store/.gpg-id
# там указано имя или ID ключа, используемого pass.
========================================
```
```sh
sudo apt install pass
which pass
pass init vlapa@ya.ru
cd /root/.password-store/
ls -la ~/.password-store/
# Добавить запись:
pass insert -m Email/mail.ru
конец - < ctrl+d >
# Удалить запись:
pass rm Email/mail.ru
# Редактировать запись:
pass edit Email/mail.ru
# Система откроет файл в текстовом редакторе (по умолчанию заданный в переменной окружения $EDITOR или $VISUAL).
# Посмотреть запись:
pass Email/ya.ru
# Помощь:
pass —-help | less
# Сгенерировать:
pass generate email/vlapa.ru 25
# Получить пароль:
pass -c Email/ya.ru
# Будет предложено ввести мастер пароль Pass. Пароль будет находиться в буфере в течении 45 секунд. После чего буфер обмена будет очищен.
# Если просто необходимо отобразить сохраненный пароль, просто удалите `-c`
# Изменить данные пароля:
pass edit Email/ya.ru
# ===============================
pass git init
pass git remote add origin git@10.10.10.2:~/git/pass
pass git push
# commit делать не надо!
```
```sh
# Заменить первую строку в записи pass новым сгенерированным паролем, оказывается, можно так:
pass generate -i Email/my@email.com 20
```
============================================
## Шифрование файлов при помощи GPG
GNU Privacy Guard – это и есть GPG – свободная реализация шифрования данных для их защиты. Это очень актуально, ведь информацию, если она персональная, конфиденциальная или просто секретная необходимо защищать. Технология GPG основана на защите данных при помощи ключей шифрования, которые изначально должны быть созданы, а также соответствующим образом распространены между участниками обмена защищаемыми данными.
Как работает защита данных с помощью ключей GPG
Для того, чтобы стороны могли передавать друг другу зашифрованные данные, должен быть выполнен ряд условий:
- наличие ключей шифрования GPG, которые представляют собой пару ключей — открытый и закрытый;
- обе стороны должны обменяться открытыми ключами;
- передающая сторона должна зашифровать данные с помощью
открытого ключа, полученного от принимающей стороны при обмене
этими ключами;
- принимающая сторона при получении шифрованных данный должна
расшифровать их своим закрытым ключом, открытой частью которого (т. е. открытым ключом) были зашифрованы данные передающей стороной.
Отсюда вытекают два важных момента:
- расшифровать данные можно только закрытым ключом, который должен храниться у его владельца в надёжном и недоступном для посторонних месте;
- данные всегда шифруются именно ключом адресата, т. е. того, кому нужно передать зашифрованные данные.
Открытые ключи распространяются свободно. Ими можно обмениваться непосредственно, либо загружать на специальные сервера для хранения и обслуживания ключей GPG.
Также необходимо иметь специальный сертификат для отзыва открытых ключей, чтобы сделать их недействительными. Кроме того механизм защиты данных по ключам позволяет подписывать отправляемые данные закрытым ключом, т. е. гарантировать, что эти данные отправлены именно тем, кто указан как отправитель. А соответствующий этому закрытому ключу открытый ключ, имеющийся у принимающей стороны может это подтвердить. Таким образом и достигается достоверная идентификация пользователей и надёжная защита передаваемых данных.
Установка системы GPG в Linux
Практически во всех популярных дистрибутивах Linux установить систему GPG позволяет система управления пакетами (СУП) этого дистрибутива. Например, для Ubuntu:
`$ sudo apt install gnupg
Наименования пакетов также могут различаться в зависимости от используемого дистрибутива, так для CentOS:
`$ sudo yum install gnupg2
Теперь можно приступить к созданию самих ключей.
Генерация и подпись ключей
Для генерации и управления ключами системы GPG предназначена команда gpg. Более подробно с ней можно ознакомиться на страницах интерактивного руководства, используя команду man gpg. Для создания же, собственно, пары (открытый и закрытый) ключей нужно выполнить команду gpg с опцией —gen-key:
`$ gpg --gen-key
В ходе выполнения команды у пользователя будут запрошены некоторые персональные данные, такие как полное имя и e-mail, необходимо их ввести, после чего начнётся генерация ключей, которая может занять некоторое время. После чего будет выведена информация о созданных ключах:
`gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
`This is free software: you are free to change and redistribute it.
`There is NO WARRANTY, to the extent permitted by law.
Замечание: "gpg --full-generate-key" вызывает полнофункциональный диалог создания ключа.
GnuPG должен составить идентификатор пользователя для идентификации ключа.
Ваше полное имя: John Silver
Адрес электронной почты: john@silver.ru
Вы выбрали следующий идентификатор пользователя:
"John Silver <john@silver.ru>"
Сменить (N)Имя, (E)Адрес; (O)Принять/(Q)Выход? O
Необходимо получить много случайных чисел. Желательно, чтобы Вы
в процессе генерации выполняли какие-то другие действия (печать
на клавиатуре, движения мыши, обращения к дискам); это даст генератору случайных чисел больше возможностей получить достаточное количество энтропии.
Необходимо получить много случайных чисел. Желательно, чтобы Вы
в процессе генерации выполняли какие-то другие действия (печать
на клавиатуре, движения мыши, обращения к дискам); это даст генератору случайных чисел больше возможностей получить достаточное количество энтропии.
gpg: ключ 49192168EGELF50S помечен как абсолютно доверенный
gpg: создан каталог '/home/john/.gnupg/openpgp-revocs.d'
gpg: сертификат отзыва записан в '/home/john/.gnupg/openpgp- revocs.d/FFBD0C66CBA22A8739ACB07949192168EGELF50S.rev'.
открытый и секретный ключи созданы и подписаны.
`pub rsa3072 2019-03-27 [SC] [годен до: 2021-03-26] FFBD0C66CBA22A8739ACB07949192168EGELF50S uid John Silver <john@silver.ru>
`sub rsa3072 2019-03-27 [E] [годен до: 2021-03-26]
Здесь pub – это открытый ключ, значение «FFBD0C66CBA22A8739ACB07949192168EGELF50S» — его отпечаток, uid – идентификатор, состоящий из полей имени и e-mail, пользователя-владельца ключа. Этот идентификатор нужно использовать при указании ключа, а также
для обозначения адресата, которому предназначается сообщение (данные), зашифрованное этим ключом. Можно указывать любое из полей. В нижеследующих примерах будет указываться email.
Для созданных ключей также автоматически будет сгенерирован и сертификат отзыва. Либо это можно сделать вручную:
`$ gpg --output ~/revocation.crt --gen-revoke your_email@address.ru
Созданный сертификат revocation.crt нужно хранить также надёжно, как и закрытые ключи. При создании сертификата отзыва нужно указать возможную причину отзыва ключа, а также комментарий к отзыву. Эту информацию будут видеть другие пользователи систем управления ключами GPG. Опция —output служит для вывода сертификата отзыва в файл, в данном случае revocation.crt.
Очень важно также подписывать ключи, которые были получены от других пользователей, если достоверно известно, что это именно те пользователи, за которых они себя выдают и ключи принадлежат действительно им. Это часто происходит при импорте открытых ключей других пользователей. После проверки их (и ключей и их пользователей-владельцев) очень желательно эти ключи подписать:
`$ gpg --sign-key other_user@address.ru
После подписи импортированного ключа нужно дать знать об этом его владельцу, чтобы он мог использовать этот ключ (ведь он подписанный) как аргумент для других пользователей, которые буду видеть, что его уже кто-то «одобрил» и доверяет ему. Для этого подписанный ключ экспортируется в файл и отправляется обратно его владельцу.
Импорт и экспорт ключей
Для того, чтобы экспортировать, например подписанный (в предыдущей главе) ключ нужно выполнить команду:
`$ gpg –-output ~/signed.key –-export –-armor other_user@address.ru
Опция —armor создаёт вывод в виде символов ASCII, т. е. в виде текста. По- умолчанию (если эту опцию не указывать) gpg создаст двоичный вывод. Теперь полученный файл с подписанным ключом можно отправлять его владельцу. Он в свою очередь может его импортировать себе в GPG, а также внести некоторую информацию о подписи:
`$ gpg --import ~/signed.key
Таким образом происходит, собственно обмен открытыми и подписанными ключами между пользователями.
Если нужно перенести свой секретный ключ куда-либо (для использования на других компьютерах), то нужно использовать опцию —export-secrert-key:
`$ gpg --output mygpgkey_private.txt --armor --export-secret-key my_email.address.ru
Чтобы теперь импортировать этот секретный ключ на другом компьютере, нужно воспользоваться опцией —allow-secret-key-import:
`$ gpg --allow-secret-key-import --import mygpgkey_private.txt
Шифрование и дешифровка данных
Чтобы зашифровать данные в GPG используется опция —encrypt:
`$ gpg --recipient other_user@address.ru --encrypt somefile
Здесь какой-либо файл somefile зашифруется открытым ключом пользователя, идентифицируемого с помощью его e-mail (other_user@address.ru) и только он сможет расшифровать этот файл своим закрытым ключом:
`$ gpg --decrypt-files somefile.gpg
Как можно видеть, при шифровке на выходе получаются файлы с расширением *.gpg.
Проверка подлинности ключа пользователя
Каким образом можно узнать, что пользователь, предоставивший свой открытый ключ действительно тот, за кого себя выдаёт, т. е. подлинный владелец соответствующего закрытого ключа?
Для этого существует отпечаток ключа, который можно получить с помощью опции —fingerprint:
`$ gpg --fingerprint john@silver.ru
`pub rsa3072 2019-03-27 [SC] [годен до: 2021-03-26] FFBD 0C66 CBA2 2A87 39AC B079 4919 2168 EGEL F50S uid [ абсолютно ] John Silver <john@silver.ru>
`sub rsa3072 2019-03-27 [E] [годен до: 2021-03-26]
Значение «FFBD 0C66 CBA2 2A87 39AC B079 4919 2168 EGEL F50S» нужно сверять с соответствующим значением, полученным таким же образом, но на стороне пользователя, приславшего этот ключ. Значения должны быть идентичны.
Заключение
В заключение необходимо отметить некоторую сложность для быстрого понимания самого механизма защиты GPG. Которая главным образом заключается в предварительном обмене ключами между взаимодействующими сторонами. Механизм GPG становится довольно просто использовать на практике. Если хотя бы пару раз выполнить обмен шифрованными данными, тем более, что это очень надёжно.
|