Які переваги та недоліки криптографічно підписує комітетів та тегів у Git?


109

Тож хтось одноліткові переглянув мою роботу, і він сказав мені, що я завжди повинен підписувати свої зобов'язання та теги криптографічно. На запитання чому, він не знав мені це пояснити, і сказав: "Це просто добре робити".

Намагаючись уникати очевидного сценарію шимпанзе , чому я справді повинен? Чи дійсно так багато вигідних переваг і немає недоліків?

Які практичні причини змусили б я підписати кожне зобов'язання та тег, який я робив?


3
Я припускаю, що це так, що є паперовий слід, який зав'язує вас. Я ніколи раніше не підписував зобов'язання, ні з git, ні з будь-якою іншою системою управління джерелами. Якщо ваш колега вважає, що існує ризик шахрайських дій, у вашої компанії, ймовірно, є більші проблеми із безпекою.
Джеймс

@James: Це не робота компанії, але я беру участь у деяких проектах з відкритим і закритим кодом.
Мадара Учіха

@James: "більші проблеми із безпекою" --- як, що? Підписання - це технічний спосіб їх вирішення, чи не так?
zerkms

8
mikegerwitz.com/papers/git-horror-story.html є відправною точкою для випадку використання підписаних комітетів та тегів.

1
@James, коли ви здійснюєте використання свого акаунта SVN, ви підписуєте своє зобов’язання. Коли ви здійснюєте свій git global config, ви є єдиним органом, що підтверджує, що ви є автором.
Флоріан Маргаїн

Відповіді:


102

(Багато в чому ґрунтується на Git Horror Story: Integrity with the Signed Commits - дуже добре прочитане та більше інформації, ніж я міг би дати у відповідь.)

Існує кілька способів компрометації сховища git (це не вада безпеки, а лише життєвий факт - не слід уникати використання git через це). Наприклад, хтось, можливо, перейшов до вашого сховища, претендуючи на вас. Або з цього приводу хтось міг би перейти до чужого сховища, претендуючи на те, що ти - ти (хтось може перейти до власного сховища, який вимагає бути тобою також). Це лише частина життя в DVCS.

Як приклад:

$ git config --global user.name 'Madara Uchiha'
$ git config --global user.email muchiha@example.com

Там я змінив свою конфігурацію git, щоб зробити вигляд, що я ти. І тепер я можу взяти на себе зобов’язання і дозволити цим зобов’язанням якось пробитися у виробництво, і, схоже, ви це зробили.

Підписавши коміти (та теги), можна довести, що певні коміти та теги були від вас (а речі, які не підписані, не повинні були вносити їх у виробничу збірку). Це дійсно ключ до всього - підписуючи зобов’язання, ви сказали, що це ваша робота.

Аспект "ваша робота" особливо важливий у ядрі linux (і, таким чином, git), який періодично потрапляє під судові позови щодо авторських прав. Підписуючи зобов’язання, ви говорите, що маєте право на програмне забезпечення - воно відстежує походження. Можливо, у вас немає доступу до джерела, на яке заявлено авторське право, і претензія є безпідставною. Можливо, компанія забула, що ви працювали над ними кілька років тому і під їх керівництвом додавали матеріал до ядра чи ще чого.

Існує певна дискусія щодо того, чи слід підписувати кожен комітет. Від підпису GPG для git-комітету? (ще у 09 році) Лінус писав:

Підписання кожного зобов’язання абсолютно нерозумно. Це просто означає, що ви автоматизуєте це, і ви робите підпис меншим. Це також не додає ніякої реальної цінності, оскільки для того, як робота GIT-ланцюга DAG роботи SHA1, вам завжди потрібна лише одна підпис, щоб зробити всі комісії доступними з того, щоб бути ефективно покритим цим. Тому підписання кожного зобов’язання просто не вистачає сенсу.

Ще багато про думки щодо входу в git можна прочитати там.

Однак це все одно пробилося в git.

Здається, існує думка більшості про те, що підписання зобов’язань непотрібне, але підписання тегів дуже добре. Цей блог, пов’язаний вгорі, говорить про те, що слід все одно підписувати. Як я вже говорив, є дебати щодо того, чи потрібно робити будь-яке зобов'язання чи ні.

Ключ до дискусії "підпишіть кожне зобов'язання", ймовірно, має стосунок робочого процесу, який ви використовуєте. Більшість людей роблять купу комісій у своєму місцевому репо, а потім натискають набір. Потрібно вистачити тегів на остаточну колекцію (припускаючи, тобто ви переконайтесь, що всі зміни правильні). Якщо ви працюєте в середовищі, де рухається безліч одиничних комітетів, відмінність між тегом і коміткою стає менш… чіткою - і підписання комітетів може стати більш корисним.


5
Це може бути достатньо (просто позначити останній), але чому б ви просто не позначали кожен комітет?
гайд

3
Як ледачий мерзотник, який не використовує теги, я переглядаю попередній коментар. У налаштуваннях git на своїй робочій станції я маю, commit.gpgsign = trueі я можу встановити відсутність недоліків. Хоча це може бути дурним, це не здається занадто дорогим.
pnovotnak

3
Я їду з @pnovotnak на цьому, чому б ти цього не зробив? Я маю на увазі, що я підписую свої зобов’язання, і інший розробник не працює в тому ж проекті, кого це цікавить? Але якщо хакер намагається вкрасти мою особу, я можу лише вказати на підпис. Мені здається, що підписання має лише переваги. Я погоджуюся, що ваш підпис набуває меншої цінності, але ви торгуєте цим, щоб не думати про це. Його в основному безкоштовна безпека.
Джаппі Керк

2
Моя особиста думка, що підписання кожного зобов’язання - це гарна річ. Я можу бути впевнений, що домовленості з моїм підписом прийшли від мене, тоді як це банально представляти автора ванільним git. Я б швидше назвав це безкоштовним підтвердженням, це людина, яку ви інакше вважаєте, що це, а не безпека.
Берто

1
@JosiahYoder. Ні, Github не відмовить у натисканні, оскільки електронна пошта не є їх службою. Скажімо, ви розмістили свій код на іншій службі (тобто: Bitbucket) і хотіли перенести свій сховище до іншого постачальника. Це не дозволить користувачам перенести сховище (Кілька комітетів декількома користувачами) або створити дзеркала тощо. Це особливість DVCS.
Рікі Нотаро-Гарсія
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.