Hash зіткнення в git


175

Що б насправді сталося, якби у мене було хеш-зіткнення під час використання git?

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

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

(Будь ласка, не відхиляйте це питання, обговорюючи, наскільки це малоймовірно - Дякую)


26
I've been informed by the git Gods that the chances of a SHA1 collision is the same as the Earth being sucked up into the black hole created by the CERN accelerator. If this is indeed true, then there's no need for that extra memcmp. , джерело: lwn.net/Articles/307281
KurzedMetal

16
АБСОЛЮТНО НЕ ТАК. Процитуючи Дена Бернштейна: "Те, що вчені ще не здійснили атаку зіткнення SHA-1, є незначною історичною аварією" - тепер, коли змагання SHA-3 закінчилося, є хороший шанс, що відповідні люди звернуть свою увагу до використання відомої атаки для створення зіткнення. Марк Стівенс оцінює складність як лише 2 ^ 61 операцію. Ймовірно, скоро відбудеться зіткнення SHA-1; дивно, що цього ще не сталося.
Пол Кроулі

27
@KurzedMetal: Є шанс створити чорну діру в ЦЕРН (два протони зіткнулися б точно (10 ^ -15 м)), однак ця чорна діра не висмоктує Землю, вона миттєво випарується через радіацію Хокінга ... Отже шанси на зіткнення SHA1 набагато більше, ніж всмоктування ... просто кажу ...
Jaa-c


17
Дивно, що ви спеціально просили людей не обговорювати ймовірність зіткнення git, і майже всі говорили про неправдоподібність зіткнення git. Цим людям слід заборонити стаковерх на все життя!
Юкіо Фукузава

Відповіді:


108

Збір атомів на 10 Місяць

Хеш SHA-1 - це шістнадцятковий рядок символів ... це 4 біти на символ 40 разів - 160 біт. Тепер ми знаємо, що 10 біт приблизно 1000 (точніше 1024), тобто 1 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 різних хешів SHA-1 ... 10 48 .

Що таке еквівалент? Ну а Місяць складається приблизно з 10 47 атомів. Отже, якщо у нас є 10 Місяць ... і ви випадковим чином виберете один атом на одній із цих лун ... а потім продовжуйте і знову вибираєте на них випадковий атом ... то ймовірність того, що ви виберете той самий атом двічі , є ймовірність того, що два дані git-коміти матимуть однаковий хеш SHA-1.

Розширюючи це, ми можемо задати питання ...

Скільки комісій вам потрібно в сховищі, перш ніж почати турбуватися про зіткнення?

Це стосується так званих "Нападів на день народження", що, в свою чергу, посилається на "Парадокс від дня народження" або "Проблема з днем ​​народження", де зазначено, що коли ви вибираєте випадковим чином з заданого набору, вам потрібно напрочуд кілька виборів, перш ніж ви швидше, ніж ні щоб двічі щось вибрав. Але "напрочуд мало" - тут дуже відносний термін.

У Вікіпедії є таблиця щодо ймовірності зіткнень Парадокса Дня народження . Для хеша з 40 символами немає запису. Але інтерполяція записів на 32 та 48 символів приводить нас до діапазону 5 * 10 22 git, що здійснює 0,1% ймовірності зіткнення. Це п’ятдесят тисяч мільярдів різних доручень , або п’ятдесят Zettacommissions , перш ніж ви досягнете навіть 0,1% шансу на те, що у вас зіткнення.

Сума байтів хешів для цих комітетів буде більше даних, ніж усіх даних, що генеруються на Землі за рік, а це означає, що вам потрібно буде виправити код швидше, ніж YouTube виводить відео. Успіхів у цьому. : D

Суть у тому, що якщо хтось навмисно не спричинив зіткнення, ймовірність того, що трапиться випадково, настільки приголомшливо мала, що ви можете проігнорувати це питання

«Але коли зіткнення дійсно станеться, то , що відбувається на самому ділі?»

Гаразд, припустимо, що малоймовірне трапляється, чи припустимо, що комусь вдалося пристосувати навмисне зіткнення хешу SHA-1 . Що ж відбувається тоді?

У цьому випадку є чудова відповідь, де хтось експериментував над цим . Я цитую з цієї відповіді:

  1. Якщо крап вже існує з тим самим хешем, ви взагалі не отримаєте попереджень. Здається, все нормально, але коли ви натискаєте, хтось клонується, або ви повернетесь, ви втратите останню версію (відповідно до того, що пояснено вище).
  2. Якщо деревооб'єкт вже існує, і ви робите крапку з таким же хешем: все буде здаватися нормальним, поки ви не спробуєте натиснути або хтось не клонує ваше сховище. Тоді ви побачите, що РЕПО зіпсоване.
  3. Якщо об’єкт фіксації вже існує, і ви робите крапку з таким же хешем: такий же, як №2 - пошкоджується
  4. Якщо блоб вже існує, і ви робите об'єкт фіксації з тим же хешем, він не вийде при оновленні "ref".
  5. Якщо крапля вже існує, і ви робите об’єкт з дерева з таким же хешем. Він не вдасться створити команду.
  6. Якщо деревооб'єкт вже існує і ви робите об’єкт фіксації з тим самим хешем, він не вийде при оновленні "ref".
  7. Якщо деревооб'єкт вже існує, і ви робите об’єкт дерева з таким же хешем, все буде здаватися нормальним. Але коли ви здійснюєте, усі сховища посилаються на неправильне дерево.
  8. Якщо об’єкт фіксації вже існує, і ви робите об’єкт фіксації з тим самим хешем, все буде здаватися нормальним. Але коли ви здійснюєте, комітка ніколи не буде створена, і вказівник HEAD буде переміщений до старого.
  9. Якщо об’єкт фіксації вже існує, і ви робите деревний об’єкт з тим самим хешем, він не вийде при створенні фіксації.

Як вам здається, деякі випадки не є гарними. Особливо випадки №2 та №3 псують ваше сховище. Однак здається, що помилка залишається всередині цього сховища, і атака / химерна неймовірність не поширюється на інші сховища.

Крім того, здається, що питання про навмисні зіткнення визнається реальною загрозою, і, наприклад, GitHub вживає заходів для її запобігання .


22
Я не знаю, чи точні цифри, але боже, це чудовий графічний спосіб описати ймовірність, і смішно :)
mimoralea

4
Зараз я зв’язуюся з НАСА, щоб знайти 10 місяців і спробувати. Якщо у нас не буде 10 місяців, ніхто не скаже, чи це працює;)
Уткарш Кумар,

2
Шанс, що випадкове зафіксування фактичного текстового файлу стикається з нулем, дуже малоймовірний. Але ця відповідь повністю пропускає те, що хтось міг спробувати і навмисно створити зіткнення. Якщо хеш SHA-1 піддається атаці, це стає досить важливим фактором.
Maarten Bodewes

7
Причина відмови від голосування: Дуже добре сказано, але ймовірність тут абсолютно нічого не означає. Ви можете сказати те саме про виграш у лото, але люди щодня та там виграють лото. Тож компанія лото насправді не може просто сказати: шанс невеликий, тому нам не слід турбуватися про те, що насправді виплачують джекпот. Питання ОП тут: що відбувається, коли виникає цей невеликий шанс, а ви не змогли відповісти на це.
Юкіо Фукузава

3
@FukuzawaYukio Не надруковано 2 ^ 48 лотерейних квитків, однак - лише мільйони (можливо 200 мільйонів загалом на рік .. хто знає?), І є виграшна лотерея. Ймовірність набагато більша, і для деяких лотерейних квитків виграшний квиток завжди друкується; Таким чином, переможець неминучий (якщо випадковий квиток випадково не буде замінено). Крім того, я багато років тому влаштував псевдо-реалістичну лотерейну гру: lottery.py . Потрібно говорити, що ви втрачаєте 99% часу.
dylnmc

67

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

Дивіться публікацію Лінуса Торвальдса в темі "Починаєш думати про ша-256?" у списку розсилки git .


4
"Якщо два файли мають однакову хеш-суму в git, вони вважатимуть ці файли однаковими." Це насправді правильна відповідь. Однак у вас є джерело для цього твердження клаустофер? Ваше посилання не працює для мене.
Тіаго

3
Але це не так вже ймовірно, якщо ви працюєте над проектом із колекцією зразків хеш-зіткнення.
Doomjunky

6
@JBishop Ні, це не було. Якщо у вас є докази хеш-зіткнення, ви отримаєте миттєву популярність. Не забудьте опублікувати його! Я надішлю ящик по-справжньому гарного пива Гарлем, якщо ви покажете мені повне хеш-зіткнення SHA-1, створене протягом Git протягом тижня. Зауважте, що це повинно бути окреме хеш-зіткнення, а не одне вже цитується (не те, що його ще ніхто не опублікував, але все-таки).
Maarten Bodewes

7
+1 Єдина відповідь на даний момент, яка насправді відповідає на питання. Все інше - це лепет про те, що він може виникнути, про який уже знає кожен розробник.
Юкіо Фукузава

2
Будьте дуже обережні, коли Лінус обговорює ІТ-безпеку - раніше він помилявся і в цьому помиляється. Якщо можна створити зіткнення SHA-1 за власним бажанням, можна використовувати його для різного роду хаосів, таких як створення кругових історій, які призводять до збоїв серверів і клієнтів Git.
DomQ

26

Відповісти на це запитання не можна правильно "але", не пояснивши, чому це не проблема. Це неможливо зробити, не по-справжньому добре розібравшись у тому, що насправді є хеш. Це складніше, ніж прості випадки, до яких ви могли потрапити в програму CS.

Тут є основне нерозуміння теорії інформації. Якщо ви зменшите велику кількість інформації на менший обсяг, відкинувши деяку кількість (тобто хеш), є ймовірність зіткнення, безпосередньо пов’язаного з довжиною даних. Чим коротше дані, тим менше буде МОЖЛИВО. Тепер переважна більшість зіткнень будуть химерними, що робить їх набагато більш шансовими, що насправді трапляться (ви ніколи не перевірятимете хитрість ... навіть бінарне зображення дещо структуроване). Зрештою, шанси віддалені. Щоб відповісти на ваше запитання, так, git трактуватиме їх як однакові, зміна алгоритму хешу не допоможе, знадобиться "друга перевірка", але в кінцевому підсумку вам знадобиться стільки ж "додаткової перевірки" даних так як довжина даних буде на 100% впевнена ... майте на увазі, ви б 99,99999 .... на дійсно велику кількість цифр .... обов'язково за допомогою простої перевірки, як ви описуєте. SHA-x є криптографічно сильними хешами, що означає, що взагалі важко навмисно створити два набори вихідних даних, які одночасно ДУЖЕ ПОХОДНІ і мають однаковий хеш. Один біт змін даних повинен створити більше одного (бажано якнайбільше) бітів зміни хеш-виводу, що також означає, що дуже важко (але не зовсім неможливо) повернутися з хеша до повного набору зіткнення, і тим самим витягнути оригінальне повідомлення з цього набору зіткнень - всі, окрім кількох, будуть хитрішими, а з тих, яких немає, все ще існує величезна кількість, яку слід просіяти, якщо довжина повідомлення має якусь значну довжину. Мінусом крипто-хешу є те, що вони повільно обчислюються ... загалом.

Отже, що все це означає для Git? Не багато. Хеші роблять настільки рідко (відносно всього іншого), що їх обчислювальний штраф загалом низький для операцій. Шанси потрапити на пару зіткнень настільки низькі, що це не реальний шанс виникнути і не виявитись негайно (тобто ваш код, швидше за все, раптом припинить створення), що дозволяє користувачеві виправити проблему (створити резервну копію версії, і внесіть зміни знову, і ви майже напевно отримаєте інший хеш із-за зміни часу, який також подає хеш у git). Ймовірніше, що це буде справжньою проблемою для вас, якщо ви зберігаєте довільні бінарні файли в git, що насправді не є основною моделлю використання. Якщо ви хочете це зробити ... вам, мабуть, краще використовувати традиційну базу даних.

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


4
you'll almost certainly get a different hash because of the time change, which also feeds the hash in gitХіба хеш не базується лише на вмісті файлу?
fredoverflow

4
Хеш блобу заснований на вмісті файлу (з крихітним бітком метаданих), однак хеш коміту (який теоретично може також зіткнутися) містить поточний час, а також хеш дерева, автор, хеши батьківських зобов’язань тощо. Однак, як вказує @Steve, дрібні речі мають меншу ймовірність зіткнення, а фіксація - це невелика річ.
cdyson37

1
Не думайте, що я згоден із "Чим коротші дані, тим менше МНЕ [зіткнення]". Якщо ви маєте на увазі коротші хеші, то ви зменшуєте набір можливих хешей = більше вхідних карт на кожен хеш = більший шанс зіткнення. Якщо ви маєте на увазі більш короткі повідомлення, які ви хешуєте, то це справедливо лише в тому сенсі, що кількість можливих входів обмежена кількістю використаних символів, що здається настільки очевидним, я вважаю, що я повинен пропустити вашу точку?
Основний

Я ніколи не замислювався над "ДУЖЕ СИЛЬНОЮ" точкою, яка справді хороша. Це в основному означає, що для того, щоб мати 2 коміти з одним і тим же хешем, вам потрібно буде змінити значну частину символів у кожному файлі (не кажучи вже про назви файлів, шляхи та кількість файлів).
PieterNuyts

1
@PieterNuyts Ні, щоб отримати певний хеш з довільного початкового файлу, вам зазвичай доведеться змінити інформацію у файлі на величину, аналогічну кількості бітів інформації в хеші, тобто приблизно 160 біт для SHA-1. Однак тут враховується інформація про те, які біти потрібно змінити, тому чим довше файл, тим менше бітів, які вам доведеться змінити, якщо ви виберете правильні. Гіпотетично, враховуючи файл довжиною набагато вище 2 ^ 160 байт, ви можете отримати майже будь-який хеш, змінивши один біт, оскільки розташування цього біта несе понад 160 біт інформації!
М Клостер

10

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

Зіткнення можливі для будь-якого алгоритму хешу, тому зміна хеш-функції не виключає проблеми, вона просто робить її менш ймовірною. Тож вам слід вибрати дійсно хорошу хеш-функцію (SHA-1 вже є, але вас просили не говорити :)


Я думаю, ти маєш на увазі "більш малоймовірний" чи "менш ймовірний", правда? Впевнені, що ви можете перейти на алгоритм хешу з меншим числом байтів на виході, але це ви не мали на увазі, правда? :)
MichaelK

2
SHA-1 розбита в тому сенсі, що стане можливим створювати навмисні хеш-колізії. Я думаю, це було і в 2012 році. Тож зміна на інший хеш, який є більш безпечним і має більший стан та вихід, безумовно, призведе до зміни.
Maarten Bodewes

9

Ви можете побачити гарне дослідження в " Як Git впорався зіткненням SHA-1 на краплі? ".

Оскільки тепер можливе зіткнення SHA1 (як я посилаюсь у цій відповіді на shattered.io ), знайте, що Git 2.13 (Q2 2017) покращить / пом'якшить поточну ситуацію за допомогою варіанту "виявлення спроби створити зіткнення" варіанту реалізації SHA-1 Марк Стівенс (CWI) та Ден Шумов (Microsoft) .

Див. Зробити комісію f5f5e7f , зробити 8325e43 , здійснити c0c2006 , зробити 45a574e , здійснити 28dc98e (16 березня 2017 р.) Джеффом Кінгом ( peff) .
(Об’єднав Хуніо С Хамано - gitster- у комітці 48b3693 , 24 березня 2017 р.)

Makefile: зробити DC_SHA1за замовчуванням

Ми використовували реалізацію SHA1 з бібліотеки OpenSSL за замовчуванням.
Оскільки ми намагаємось бути обережними проти атак зіткнення після недавнього "розбитого" оголошення, переключіть за замовчуванням, щоб заохочувати людей замість цього використовувати реалізацію DC_SHA1.
Ті, хто хоче використовувати реалізацію з OpenSSL, можуть явно попросити її під OPENSSL_SHA1=YesPleaseчас запуску " make".

Насправді у нас не відбувається зіткнення об’єкта Git, тому найкраще, що ми можемо зробити, - це запустити один із розбитих PDF-файлів через test-sha1. Це повинно викликати перевірку зіткнення і загинути.


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

Оновіть грудень 2017 року за допомогою Git 2.16 (1 квартал 2018 р.): Намагання щодо підтримки альтернативної SHA триває: див. " Чому Git не використовує більш сучасний SHA? ".

Ви зможете використовувати інший алгоритм хешу: SHA1 вже не є єдиним для Git.


Git 2.18 (Q2 2018) документи, які обробляють.

Див. Комісію 5988eb6 , вчиняємо 45fa195 (26 березня 2018 р.) Ævar Arnfjörð Bjarmason ( avar) .
(Об’єднано Хуніо С Хамано - gitster- у комітеті d877975 , 11 квітня 2018 р.)

doc hash-function-transition: уточнити, що означає SHAttered

Спроба уточнити, що атака SHAttered означає на практиці для Git.
У попередній версії тексту не згадувалося, що Git вже має пом’якшення для цієї конкретної атаки, яка, як стверджують дослідники SHAttered, виявить криптоаналітичні атаки зіткнення.

Можливо, я зрозумів деякі нюанси неправильно, але, наскільки я знаю, цей новий текст точно підсумовує поточну ситуацію з SHA-1 в git. Тобто git вже не використовує SHA-1, він використовує Hardened-SHA-1 (вони просто так трапляються, щоб отримати ті самі виходи 99,99999999999 ...% часу).

Таким чином, попередній текст був невірним, стверджуючи, що:

[...] Як результат [SHAttered], SHA-1 вже не можна вважати криптографічно захищеним [...]

Це не так. У нас є пом'якшення проти SHAttered, проте ми вважаємо за доцільне рухатися до роботи у разі появи NewHashмайбутніх уразливих ситуацій або SHA-1, або Hardened-SHA-1.

Тож нова документація тепер говорить:

Git v2.13.0 і пізніше згодом перейшов до загартованої реалізації SHA-1 за замовчуванням, яка не вразлива для атаки SHAttered.

Таким чином, Git фактично вже перейшов на новий хеш, який не є SHA-1 і не поділяє його вразливості, його нова хеш-функція просто відбувається, щоб отримати точно такий же вихід для всіх відомих входів, за винятком двох PDF-файлів, опублікованих SHAttered дослідники, і нова реалізація (написана цими дослідниками) заявляє про виявлення майбутніх криптоаналітичних атак зіткнення.

Незалежно від цього, вважається доцільним перейти будь-який варіант SHA-1 до нового хешу. Немає гарантій, що майбутні напади на SHA-1 не будуть опубліковані в майбутньому, і ці напади можуть не мати життєздатних наслідків.

Якби SHA-1 та його варіанти мали бути справді зламані, хеш-функція Git вже не могла вважатися криптографічно захищеною. Це може вплинути на передачу хеш-значень, оскільки ми не могли повірити, що задане хеш-значення є відомою хорошою версією вмісту, яку призначено оратором.

Примітка: цей самий документ зараз (Q3 2018, Git 2.19) прямо посилається на "новий хеш" як SHA-256 : див. " Чому Git не використовує більш сучасний SHA? ".


4
Тут єдина гідна відповідь або коментар. Підсумок - хоч це й малоймовірно, але можливо. Вони також будуть негайно невпізнаними та усунені за допомогою налаштування файлу (із коментарем), щоб уникнути зіткнення. Навмисні подвиги вважаються неактуальними, оскільки хтось може так само легко перевірити "поганий код" - і є такі речі, як підписи та свідомі запити на тягнення до процедурних процедур, що не дозволяють випадковим людям перевіряти випадкові речі.
Бред

5

Google зараз стверджує, що зіткнення SHA-1 можливе за певних умов: https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html

Оскільки git використовує SHA-1 для перевірки цілісності файлів, це означає, що цілісність файлів у git порушена.

IMO, git обов'язково повинен використовувати кращий алгоритм хешування, оскільки навмисне зіткнення тепер можливе.


2
Крім того, було б доцільно не довіряти слову Лінуса щодо безпеки комп'ютера. Він раніше помилявся, і в цьому помиляється. (Наприклад, оракул зіткнення SHA-1 дозволяє створювати кругові історії фіксації, щоб
збивати

2

Хеш-зіткнення настільки малоймовірне, що це душевний розум! Вчені всього світу намагаються досягти цього, але поки не впоралися. Однак для деяких алгоритмів, таких як MD5, вони досягли успіху.

Які шанси?

SHA-256 має 2 ^ 256 можливих хешей. Тобто приблизно 10 ^ 78 . Або, якщо бути більш графічним, шанси на зіткнення є приблизно

1: 100 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

Шанс виграти в лотерею становить приблизно 1: 14 Міо . Шанс зіткнення з SHA-256 - це як виграти в лотерею 11 днів поспіль !

Математичне пояснення: 14 000 000 ^ 11 ~ 2 ^ 256

Крім того, у Всесвіті близько 10 ^ 80 атомів. Це всього в 100 разів більше, ніж є комбінацій SHA-256.

Успішне зіткнення MD5

Навіть для MD5 шанси невеликі. Хоча математикам вдалося створити зіткнення:

d131dd02c5e6eec4 693d9a0698aff95c 2fcab5 8 712467eab 4004583eb8fb7f89
55ad340609f4b302 83e4888325 7 1415a 085125e8f7cdc99f d91dbdf280373c5b
d8823e3156348f5b ae6dacd436c919c6 dd53e2 b 487da03fd 02396306d248cda0
e99f33420f577ee8 ce54b67080 a 80d1e c69821bcb6a88393 96f965 2 b6ff72a70

має той же MD5, що і

d131dd02c5e6eec4 693d9a0698aff95c 2fcab5 0 712467eab 4004583eb8fb7f89
55ad340609f4b302 83e4888325 f 1415a 085125e8f7cdc99f d91dbd7280373c5b
d8823e3156348f5b ae6dacd436c919c6 dd53e2 3 487da03fd 02396306d248cda0
e99f33420f577ee8 ce54b67080 2 80d1e c69821bcb6a88393 96f965 a b6ff72a70

Це не означає, що MD5 менш безпечний зараз, коли його алгоритм зламаний. Ви можете створювати зіткнення MD5 спеціально, але шанс випадкового зіткнення MD5 все ще становить 2 ^ 128, що ще дуже багато.

Висновок

Не потрібно турбуватися про зіткнення. Алгоритми хешування - другий найбезпечніший спосіб перевірити однаковість файлів. Єдиний безпечніший спосіб - це бінарне порівняння.


4
Ця відповідь в основному стосується SHA-256, що не має значення, оскільки питання стосувалося SHA-1. Математика, що показує малоймовірність зіткнення SHA-256, є набагато оптимістичнішою, ніж це призведе до SHA-1. Це все ще малоймовірно, але відповідь SHA-1 була б більш актуальною.
Ендрю Арнотт

@AndrewArnott Немає відповідної різниці між SHA-256 і SHA-1. SHA-1 в 2 ^ 128 рази слабший, але це також не має значення. Це все ще не порушується, тому моя відповідь не така помилкова.
bytecode77

4
SHA-1 дійсно зламаний, тому сказати, що "все ще не зламається" також є невірним. Зважаючи на те, що SHA-1 насправді порушено, хтось міг би навмисно атакувати алгоритм g-Sha-1 для заміни вмісту, не виявляючи його. SHA-256 ще не зламаний, тому було б більш безпечним. Таким чином, відповідь на запитання про можливі зіткнення git найкраще зберігати в SHA-1.
Ендрю Арнотт

"Це не означає, що MD5 менш безпечний зараз, коли його алгоритм зламаний." Приходь ще? Чи можете ви пояснити це речення?
Maarten Bodewes

Причина відповіді: Тому що існує велика плутанина серед людей, які не знайомі з обчислювальною системою і все ще приземляються тут від пошуку в Інтернеті. Помилкові уявлення про "шифрування проти обчислювальної потужності" на мій досвід зустрічаються частіше, ніж ви думаєте, тому я вирішив це як додаткову інформацію.
bytecode77


1

Нещодавно я знайшов публікацію з 2013-04-29 в дискусійній групі BSD за адресою

http://openbsd-archive.7691.n7.nabble.com/Why-does-OpenBSD-use-CVS-td226952.html

де плакат стверджує:

Я зіткнувся з хеш-зіткненням одного разу, використовуючи git rebase.

На жаль, він не надає жодних доказів своєї претензії. Але, можливо, ви хочете спробувати зв’язатися з ним і запитати його про цей передбачуваний випадок.

Але на більш загальному рівні, внаслідок нападу на день народження шанс зіткнення хешу SHA-1 - це 1 у порозі (2, 80).

Це звучить багато і, безумовно, набагато більше, ніж загальна кількість версій окремих файлів, присутніх у всіх сховищах Git у світі.

Однак це стосується лише версій, які фактично залишаються в історії версій.

Якщо розробник дуже покладається на повторне завантаження, кожен раз, коли запускається база даних для гілки, усі комісії у всіх версіях цієї гілки (або перезавантажена частина гілки) отримують нові хеші. Те саме стосується всіх модифікованих файлів за допомогою "git filter-branch". Тому "rebase" та "фільтр-гілка" можуть бути великими множниками для кількості гешів, що генеруються з часом, навіть якщо насправді не всі вони зберігаються: Часто після повторного використання (особливо з метою "очищення" гілки) ), оригінальна гілка викидається.

Але якщо зіткнення відбудеться під час відновлення бази даних або відділення фільтра, воно все одно може мати несприятливі наслідки.

Іншою справою було б оцінити загальну кількість хешованих утворень у сховищах git та побачити, наскільки вони далекі від Pow (2, 80).

Скажімо, у нас є близько 8 мільярдів людей, і всі вони будуть працювати з git і зберігати свої речі в 100 сховищах на людину. Нехай далі припускається, що середній сховище містить 100 комітів та 10 файлів, і лише один із цих файлів змінюється на комісію.

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

Для 100 сховищ 8 мільярдів людей це дає порошок (2, 47), що ще далеко від пороху (2, 80).

Однак це не включає передбачуваний ефект множення, згаданий вище, тому що я не впевнений, як його включити в цю оцінку. Можливо, це може значно збільшити шанси на зіткнення. Особливо, якщо дуже великі сховища, які мають довгу історію фіксації (наприклад, ядро ​​Linux), багато людей відновлюють для невеликих змін, які, тим не менш, створюють різні хеші для всіх порушених комітетів.


Цікаво. +1. Як вже говорилося вище, це питання буде йти в кінці кінців: stackoverflow.com/a/47838703/6309
VonC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.