статті та ідеї для розробників програмного забезпечення та веб-розробників.
Як створити ключі для PGP
Практично всі знають, що сьогодні важливо шифрувати дані, і є кілька способів зробити це. Як би просто не звучало поняття шифрування – «використовуйте ключ для шифрування ваших даних» – це не завжди просто зробити. Тут ми пояснюємо перший крок – створення ключів шифрування. У цьому посібнику описано метод створення ключів для PGP з використанням GnuPG [http://www.gnupg.org/], повної та безкоштовної реалізації проекту GNU стандарту OpenPGP, як визначено в RFC48.
Практично всі знають, що сьогодні важливо шифрувати дані, і є кілька способів зробити це. Як би просто не звучало поняття шифрування – «використовуйте ключ для шифрування ваших даних» – це не завжди просто зробити. Тут ми пояснюємо перший крок – створення ключів шифрування.
У цьому посібнику описано метод створення ключів для PGP з використанням GnuPG , повної та безкоштовної реалізації у проекті GNU стандарту OpenPGP, як це визначено в RFC4880 .
Спочатку отримаєте пакет GnuPG в Linux:
apt-get install gnupg Щоб створити зв'язок ключів, використовуйте таку команду:
Якщо ви запропонуєте вказати тип ключа, виберіть (1) RSA and RSA (default) . Виберіть довжину ключа. Довжина ключа за замовчуванням – 2048, що має бути достатньо для більшості додатків, хоча якщо ви дійсно параноїк (недбало), ви можете зробити його довше (коротше). Після вибору довжини ключа введіть термін дії (або 0 ключа з необмеженим терміном дії).
Нарешті, GnuPG запросить у вас інформацію, яка пізніше використовуватиметься додатками, щоб визначити, хто це ключ, тому не забудьте вказати точну інформацію.
Ви можете побачити це повідомлення:
We need to generate a lot of random bytes. Це хороша ідея для виконання деяких інших дій (типу на клавіатурі, переміщення звуку, використання дисків) протягом основної generation; це дає рівнем номера генератора, щоб отримати відмінність до поганої статевої ентропії. Не приємні random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need 284 more bytes) У цьому випадку ви повинні робити саме так, як він каже. Не хвилюйтесь, нічого не зламано. GnuPG просто намагається створити для вас найкращий (читай: найвипадковіший) із можливих ключів. Один із швидких способів змусити ОС працювати – запустити це з окремого командного рядка:
Зрештою, деяка інформація про ваші ключі буде роздрукована, і у вас буде два нових ключі, що знаходяться в ~/.gnupg/pubring.gpg та ~/.gnupg/secring.gpg .
Ось і все! Ви маєте новий ключ, готовий до використання для шифрування PGP.
Licensed under CC BY-NC-SA 4.0
Ця стаття народилася з простого завдання, мені потрібно було передати файл із паролями з одного комп'ютера на інший через інтернет. Можна скільки завгодно говорити про шифрування в месенджері та безпечні сервіси, які “спрощують” наше життя. Але факт залишається фактом, якщо ви хочете дійсно безпечно передати дані через інтернет, доведеться поринути у шифрування. Я не фахівець з інформаційної безпеки, мій інтерес чисто обивательський. Перше правило тут – канали передачі завжди небезпечні.Друге – будь-який сервіс з користувачами завжди буде метою для зламів та пошуку вразливостей.
PGP (Pretty Good Privacy) – одна з перших популярних реалізацій шифрування з відкритим ключем. Вона має цікаву історію, особливо в частині як уряд США намагався заборонити її експорт. У результаті PGP стала комерційним товаром. Доступна безкоштовна версія, яка базується на тому ж стандарті, що і PGP. Вона називається GnuPG (або GPG). Оскільки стандарт однаковий, користувачі часто говорять PGP-ключ і PGP-повідомлення, хоча насправді використовують GnuPG.
Зважаючи на свій вік і поширеність, PGP є однією з найбільш критикованих реалізацій. Але саме через ці два фактори PGP є свого роду стандартом. Купа помилок у ньому вже було знайдено та усунено і багато хто вже звикли/знають як з ним працювати. При використанні сучасних алгоритмів він дає непогану криптостійкість, а до мінусів можна віднести не найпростіше управління, для якого потрібне невелике занурення.
Припустимо, ви хочете надіслати комусь повідомлення, що містить делікатну інформацію і не хочете, щоб хтось міг ще його прочитати. Найкращий спосіб буде зашифрувати повідомлення спеціальним ключем, який знатимете тільки ви та одержувач. Якщо атакуючий перехопить повідомлення, він зможе нічого розшифрувати. В наш час ми вважаємо "умовно не зможе" тому що комп'ютерні потужності зростають і, наприклад, застарілі алгоритми шифрування можуть бути зламані як через уразливість, так і методом перебору. Такий варіант називається системою із симетричним ключем. Вони працюють нормально, але є проблема курки та яйця, перш ніж відправити повідомлення, потрібно поділитися ключем, а як це зробити без секретного каналу?
PGP вирішує саме цю проблему. Криптографія відкритого ключа дозволяє безпечно ділитися інформацією, незалежно на якій відстані та за якими межами ви знаходитесь та не потребує встановлення початкового безпечного каналу.
Шифрування та дешифрування в криптографії публічним ключем спирається на пару математично унікальних ключів. Один називається публічний, а інший приватний. Публічний ключ надає односпрямовану функцію, подібно до висячого замку. Будь-яка людина може його закрити, але відкрити лише власник закритого ключа. Критичним моментом є захист приватного ключа, який використовується для розшифрування повідомлення, зашифрованого публічним ключем. Він повинен завжди залишатися секретним, відомим лише власнику. На малюнку нижче ілюструється приклад шифрування та дешифрування.
Якщо Ваня хоче надіслати зашифроване повідомлення Пете, йому потрібен Петін публічний ключ. Це означає, що Петя має їм якось поділитися, наприклад, у соціальних мережах. Тоді Ваня зможе взяти цей публічний ключ, зашифрувати їм повідомлення та відправити будь-яким, у тому числі ненадійним каналом зв'язку Пете. А Петя своєю чергою розшифрує повідомлення своїм приватним ключем.
Одна з проблем із публічним ключами це самозванство. Немає легкого способу гарантувати, що певний публічний ключ, опублікований онлайн, дійсно належить конкретній людині. Атакуючий може згенерувати пару ключів і "підсунути" свій публічний ключ, прикидаючись іншою людиною.
Щоб вирішити цю проблему, PGP має механізм відбитків. Відбитки (Fingerprints) – це унікальний ідентифікатор, вони генеруються в результаті односторонньої математичної функції хешування.Односторонній означає, що з відбитка не можна отримати вихідний ключ, виконавши зворотну процедуру (хешувати можна будь-які дані, не тільки ключі). Результатом є цифробуквенний рядок фіксованої довжини. Користувачі публікують свої відбитки на різних платформах. Наприклад, у соціальних мережах, email підписах або навіть друкують на візитівках. Одним із способів є публікація на спеціальному сервері-довіднику (наприклад keybase.io).
У мене в блозі є окрема сторінка, на якій можна завантажити мій публічний ключ PGP і знайти відбиток. Цей же відбиток вказаний у біологічному у моєму Twitter акаунті. Завантаживши публічний ключ та імпортувавши його до себе (про це ще буде пізніше), можна повторити процес генерації відбитка самостійно та порівняти його з тим, що зазначено публічно. Таким чином ви переконаєтеся, що публічний ключ дійсно належить цій людині. Але будьте уважні, зловмисник може підмінити відбитки також.
Публікація відбитка у різних джерелах збільшує вартість атаки для зловмисника, який намагається прикинутися іншою людиною. Йому доведеться зламати кожну платформу, де опубліковано справжній відбиток, щоб підмінити його своїм власним. Виклавши відбиток на різних платформах, можна також легко ідентифікувати, якщо якась із них була скомпрометована.
Інший компонент PGP – підпис повідомлень. Це процес посвідчення повідомлення унікальним цифровим підписом.
Ваня хоче відправити повідомлення Пете і підтвердити, що повідомлення дійсно надійшло від нього, а також, що воно не було модифіковано шляхом. І тому він підписує його.Щоб підписати повідомлення PGP хешує його, щоб довжина підпису не залежала від розміру повідомлення, потім шифрує хеш використовуючи приватний ключ. Розшифрувати підпис можна лише громадським ключем Вані, тобто. якщо Петі вдалося це зробити, він буде впевнений, що повідомлення надійшло саме від Вані. Потім Петя може сам створити хеш повідомлення і порівняти його з тим, що вийшов в результаті дешифрування підпису, таким чином переконавшись, що повідомлення не було змінено в процесі передачі.
Будьте уважні, підписування повідомлення дозволяє переконатися в автентичності та цілісності даних, але не захищає саме повідомлення. Іншими словами, якщо ви тільки підписали повідомлення, воно буде передано у відкритому вигляді і будь-хто зможе його прочитати. Щоб повідомлення було конфіденційним, після підписання його треба зашифрувати публічним ключем одержувача та надіслати у шифрованому вигляді.
Поєднання підписання із шифруванням гарантує:
- Конфіденційність – гарантія того, що жодна сторона, окрім передбачуваного одержувача, не зможе отримати доступ до вмісту повідомлення
- Цілісність – гарантія того, що повідомлення не було змінено під час передачі
- Аутентифікація – гарантія того, що особа відправника може бути перевірена
- Незаперечення – гарантія того, що відправник не зможе обґрунтовано заперечувати факт надсилання повідомлення
Як я вже згадував, існує безкоштовна бібліотека та ПЗ, які реалізують PGP протокол – GnuPG. Є кілька способів, як ними користуватися, я волію використовувати термінал. Команди, наведені нижче, підходять для операційних систем MacOS і Linux, і навіть, швидше за все, Linux підсистеми в Windows – WSL.
Якщо працювати з PGP у терміналі вам некомфортно, я раджу подивитись у бік інструкцій Surveillance Self-Defense від Electronic Frontier Foundation. Вони доступні у тому числі російською мовою.
MacOS GnuPG може бути встановлений через Homebrew.
Linux використовує стандартні засоби, наприклад APT у Debian/Ubuntu.
sudo apt install gnupgПісля встановлення можна приступати до створення ключів. Для цього ми будемо використовувати команду gpg та параметр –full-generate-key. Після введення команди нам будуть задані питання з налаштуваннями, на підставі відповіді на які генеруються ключі.
Спершу вибираємо тип ключа, який хочемо створити. Можна натиснути Enter, щоб вибрати тип за замовчуванням, на MacOS це ECC (sign and encrypt) . Якщо ви не бачите такий тип у списку, а за промовчанням пропонується RSA, скористайтесь параметром –expert , щоб побачити більше опцій.
Далі нам пропонується вибрати елептичну криву. Беремо Curve 25519 та переходимо до терміну дії. Можна створити ключі з обмеженим терміном дії, це хороша, але сучасна практика, доведеться перегенерувати ключі до дати закінчення, щоб почати працювати з PGP це не потрібно, тому вибираємо key does not expire .
Для RSA буде запропоновано вибір розміру, якщо ви, з якоїсь причини не можете використовувати ECC, а доступний тільки RSA, я рекомендував би як мінімум 4096.
Далі нам потрібно буде заповнити ідентифікаційні дані, такі як ім'я та email. У полі коментар можна ввести будь-яку інформацію.
На наступному кроці потрібно буде двічі ввести пароль для ключа, тут як завжди, він повинен бути досить складним, але якщо ви його забудете/втратите, то вже ніколи не зможете користуватися приватним ключем із цієї пари. Згенерувати хороший випадковий пароль можна у спеціальному Telegram боті.
Ось і все! Тепер у вас є приватний та публічний ключі, які можна використовувати для шифрування та підписування. Щоб переглянути список доступних публічних ключів, можна використовувати команду:
А щоб подивитися доступні приватні ключі, команду:
Використовуйте –fingerprint для відображення відбитків ключів. Це довгий рядок з 10 блоків із 4 цифрами та літерами в кожному.
Щоб поділитися вашим публічним ключем, його потрібно експортувати в текстовий файл. Для цього можна скористатися наступною командою, замінивши і ті, що були вказані при генерації ключів. Замість імені також можна використовувати email.
gpg --export -a " " > firstName>-secondName>-public.keyУявімо, що хтось хоче надіслати мені повідомлення зашифрувавши його моїм публічним ключем. Для цього йому не потрібно мати власні ключі, але необхідно мати встановлену GnuPG.
Насамперед потрібно завантажити мій публічний ключ зі спеціальної сторінки. Це можна зробити через браузер або в тому ж терміналі за допомогою команди:
curl -s -o anton-riabov-public.asc 'https://doam.ru/pgp-key.txt'Тепер його потрібно імпортувати, це дозволяє зробити параметр –import із зазначенням файлу ключа.
gpg --import anton-riabov-public.ascТепер публічний ключ відображається у списку і наступним кроком варто порівняти його відбиток з тим, що вказано на сайті та в соц. мережах, щоб бути впевненим, що це правильний ключ.
Щоб зашифрувати коротке повідомлення прямо в терміналі, можна скористатися такою командою:
Параметр –encrypt вказує на те, що ми хочемо зробити шифрування. Параметр –armor дозволяє створити текст, який можна легко скопіювати, а не бінарний формат за замовчуванням. Параметр -r або –recipient вказує на одержувача повідомлення, саме ним буде виконано пошук публічного ключа для використання.
Ця команда, швидше за все, покаже попередження, що немає гарантії, що ключ належить цій людині і запитає, чи потрібно продовжувати. Якщо позитивно відповісти, ви побачите текст початківця c —–BEGIN PGP MESSAGE—– і закінчується —–END PGP MESSAGE—– . Це є зашифроване повідомлення. Його можна безпечно відправити будь-яким каналом зв'язку, і тільки я зможу його розшифрувати.
Якщо ви впевнені в якомусь конкретному ключі, ви можете змінити його рівень довіри до GnuPG і тоді попередження не буде. Для цього можна скористатися параметром –edit-key.
gpg --edit-key KEY_ID> gpg> trustДалі вам буде запропоновано вибір рівня довіри.
1 = I don't know or won't say 2 = I do NOT trust 3 = I trust marginally 4 = I trust fully 5 = I trust ultimately m = back to the main menuПісля підтвердження вибору можна вийти з редагування ключа командою quit.
“Досить хороша конфіденційність » або "PGP » це програма, яка шифрує та розшифровує дані, а також забезпечує криптографічну автентифікацію та конфіденційність для онлайн-спілкування. PGP в основному використовується для шифрування та дешифрування документів, текстів та електронних листів з метою підвищення безпеки.У шифруванні PGP використовуються такі методи, як хешування, шифрування з відкритим ключем та стиснення даних. Використовуючи «GPG” або “GnuPG”, Який є безкоштовне програмне забезпечення для підпису та безкоштовного шифрування на основі PGP, ви можете генерувати відкритий та закритий ключі. Згенеровані відкритий і закритий PGP ключі будуть мати криптографічні функції.
У цій статті будуть продемонстровані три різні методи генерації ключів за допомогою «-Gen-key”, “-Full-gen-key», І«-Quick-gen-keyВаріанти GPG. Перш ніж рухатися далі, встановіть GPG, якщо у вас ще немає.
Як встановити GPG у Linux
Щоб встановити GnuPG або GPG у системі Linux, спочатку натисніть «
CTRL+ALT+T», а потім введіть у терміналі команду, вказану нижче:
$ судно підходить встановити gnupg
Безпомилковий висновок означає, що GPG тепер встановлений у вашій системі.
Типи ключів PGP
Пара ключів PGP складається з двох типів ключів: Приватний і Суспільні ключі. Ви можете використовувати відкритий ключ для шифрування даних, і ці зашифровані дані будуть дешифровані за допомогою закритого ключа. Як користувач Linux, ви можете ділитися тільки своїм відкритим ключем. З міркувань безпеки ви повинні зберігати свій закритий ключ у секреті. Будь-хто може використовувати ваш відкритий ключ для шифрування даних; однак для його розшифровки потрібно закритий ключ.
Тепер перейдемо до процесу створення ключів PGP.
Як згенерувати ключі PGP з опцією -gen-key
У Linux ви можете згенерувати ключі PGP за допомогою команди GPG, використовуючи три різні методи. У стандартній команді GPG значок «-Gen-key" або "-Generate-key»Опція додана для зазначеної мети. Значок «-Gen-key»Допомагає згенерувати пару ключів PGP і зберігає згенерований сертифікат відкликання в папці«/root/.gnugp/” каталог.
Щоб згенерувати ключ PGP з «-Gen-key», запишіть наступну команду:
Під час виконання GPG або GnuPG попросять вас ввести інформацію для створення ідентифікатора користувача, таку як ваше справжнє ім'я та адресу електронної пошти. Перевірте додану інформацію та натисніть «Про”:
На наступному кроці ви введете «кодова фраза”. Додана кодова фраза буде використовуватись для шифрування закритого ключа користувача та захисту його від будь-яких атак. Отже, виберіть надійну парольну фразу для захисту ваших ключів GPG:
Потім введіть кодову фразу для підтвердження:
До цього моменту GPG створювала ваш ідентифікатор користувача і додавала до нього відповідну інформацію, таку як ваше справжнє ім'я, адресу електронної пошти та кодову фразу.
Після натискання кнопки «У ПОРЯДКУ», GPG створить «/root/.gnugp/openpgp-revocs.d»І збережіть у ньому згенероване свідоцтво про відкликання. Після цього ваш відкритий ключпаб", Ідентифікатор користувача"uid"І підключ"суб»Відображатиметься на терміналі:
Як згенерувати ключі PGP з опцією full-gen-key
Ви також можете використовувати «-Full-gen-key" або "-Full-generate-keyКоманда GPG для генерації ключів PGP. Це зручний метод, який дозволяє вам генерувати ключі PGP в пакетному режимі та отримувати доступ до параметрів, що представлені в діалоговому вікні.
Бажаєте згенерувати ключі PGP, використовуючи «-Full-gen-keyваріант? Якщо так, то виконайте наступну команду:
Перше запрошення на терміналі попросить вас вибрати тип ключа, який ви хочете згенерувати.Ваш ключ шифрування буде доступним у папці «ПАР”Алгоритм, а ключ дешифрування залишиться закритим. Значок «Добові»- це алгоритм, заснований на цифровому підписі та перевірці, і, нарешті,«Ельгамал»Використовує асиметричне шифрування для зв'язку.
Ми оберемо «RSA та RSA (за замовчуванням)варіант. Для цього введіть «1”Або натисніть Enter:
Розмір ключа RSA – це кількість бітів у модулі. Ви можете встановити його значення між «1024"і"4096”. Або вкажіть розмір ключа, або натисніть клавішу ENTER, щоб зберегти значення за промовчанням.3072”Біти:
Тепер введіть час закінчення терміну дії ключів PGP. Ви можете вибрати будь-який «Н» кількість днів "п”, “nwТижня,нмМісяців танью-йорк”Років для зазначеної мети. Однак ми натискатимемоЗаходити”, щоб використовувати налаштування за замовчуванням:
Вам буде запропоновано підтвердити введений час закінчення терміну дії ключів PGP. Тип "у», щоб відзначити інформацію як правильну:
На наступному кроці введіть своє «Справжнє ім'я», «Адресу електронної пошти» та будь-який «Коментар». Після цього введіть «Пропродовжувати:
Виберіть парольну фразу для захисту ваших ключів PGP та введіть її у наступному діалоговому вікні:
Тепер GPG займе деякий час для генерації ключів PGP, і ваш відкритий ключ, ідентифікатор користувача та підключення будуть надруковані на екрані терміналу:
Як згенерувати ключі PGP за допомогою quick-gen-key
Як випливає з назви опції, ключ GPG із символом «-Quick-gen-key»Пропонує швидкий метод генерації ключів PGP. Потрібно лише "Ідентифікатор користувача”, А GPG обробить інші налаштування відповідно до параметрів за промовчанням.Цей метод також позбавляє необхідності відповідати на безліч запитів у терміналі.
Ось синтаксис команди GPG з «-Quick-gen-keyваріант:
$ gpg –quick-gen-key [ Ідентифікатор користувача ]
Ми будемо використовувати "кулька”В якості нашого ідентифікатора користувача, а потім виконайте наведену нижче ключову команду GPG:
$ gpg –quick-gen-key кулька
Вам буде запропоновано лише підтвердити свій ідентифікатор користувача та ввести кодову фразу для ключів PGP, які будуть згенеровані:
Після введення ключової фрази команда GPG згенерує вашу пару ключів PGP:
Як вивести список ключів PGP за допомогою команди GPG
Щоб вивести список згенерованих ключів у терміналі Linux, виконайте просту команду GPG з «-kваріант:
Висновок
Найчастіше використання PGP доставляти зашифровані повідомлення під час спілкування. Він використовує відкритий ключ відправника для шифрування повідомлення, а потім розшифровує його за допомогою закритого ключа передбачуваного користувача. Ви можете використовувати «GPG»Для генерації пари публічних та приватних ключів PGP. Ця стаття продемонструвала, як згенерувати ключі PGP за допомогою GPG “-Gen-key”, “-Full-gen-key», І«-Quick-gen-keyОпції. Крім того, передбачена процедура перерахування згенерованих ключів PGP.