Предположим, что у меня есть хэш фиксации, но у меня нет доступа к репозиторию git, возможно ли узнать время, когда была сделана фиксация?
Как это может быть сделано?
Согласно этому ответу, хэши фиксации содержат дату и время, когда они были выполнены.
Примере:
1484e89060b2043be0b71209bacc2254161f1a8f
было произведено Wed Sep 3 09:30:59 2014 +0300
.
3 ответа
Как упоминалось в разделе «Есть ли какие-либо опасности в раскрытии git sha1 фиксирует хеши? ":
Нет абсолютно никакого способа соотнести хэш SHA 1 коммита git с фактическим содержимым коммита.
Хотя SHA-1 номинально является односторонним, это теоретически позволит злоумышленнику, который хочет угадать содержимое объекта, проверить, является ли его предположение правильным или нет.
Это повлечет за собой точное угадывание с точностью до последнего бита, включая отметки времени и другие подобные вещи .
Поэтому, если у вас нет доступа к полному репозиторию git, это кажется невозможным.
Как упоминалось в этой ветке, единственное, что вы можете сделать с помощью SHA1, - это найти контент с тем же SHA1:
Термин «обратный» - не то слово.
Имеется в виду, что вы можете сгенерировать другой ввод, для которого вывод SHA1 совпадает с вашим другим выводом SHA1 . Это потому, что SHA1 имеет коллизии.Таким образом, "
foo
" может хешировать до 1, а "bar
" также может хешировать до 1.
Это не означает, что 1 означаетfoo
, но это означает, что если ваш парольfoo
,bar
также работает при хешировании и сравнении с сохраненным хешем.Если исходный ввод не очень короткий, крайне маловероятно, что можно будет найти ввод с таким же хешем SHA-1.
Эти атаки работают, потому что пароли слабые, а SHA-1 быстро вычисляется, а не из-за какой-либо слабости SHA-1 как криптографической хеш-функции.
Примечание. (Поиск контента с таким же SHA1) на самом деле то, что проект bradfitz / gitbrute (для развлечения)
gitbrute
переборщиком пары временных меток автор + коммиттер так, что у результирующего коммита git есть желаемый префикс.Он найдет самое последнее время, соответствующее вашему префиксу.
Я упоминал об этом в "Как git обработает коллизию SHA-1 на большом двоичном объекте?"
gitbrute
кажется классным проектом. Как я могу его использовать? Я уже создал файл (go gitbrute.go
).
./gitbrute 1484e89060b2043be0b71209bacc2254161f1a8f
ничего не выводит.
gitbrute -h
предоставит вам варианты: gitbrute -prefix=xxx
(см. github.com/bradfitz/gitbrute/blob/master/gitbrute.go#L36-L38)
Ну вот
git log -2 --pretty=tformat:%aD:%H 1484e89060b2043be0b71209bacc2254161f1a8f
%aD
указывает дату создания.
Вы можете добавить другие параметры, например
%cn: committer name
%an: author name
git log -2 --pretty=tformat:%aD:%cn:%an:%H 1484e89060b2043be0b71209bacc2254161f1a8f
Если вы хотите использовать сокращенный хэш, используйте %h
вместо %H
Вы выполняете это через командную оболочку git.
.git
? Можно ли тогда что-то придумать?
Вы, наверное, думаете, что git commit ID - это каким-то образом зашифрованные данные, содержащие некоторую информацию. Но идентификаторы коммитов Git - это хэши:
[...] - это хэш SHA-1 - контрольная сумма содержимого, которое вы храните, плюс заголовок (отсюда)
Также из криптографической теории мы знаем, что хэши обладают свойством необратимости.
Таким образом, невозможно получить какую-либо информацию о фиксации только по идентификатору.
Похожие вопросы
Связанные вопросы
Новые вопросы
git
Git — это распределенная система контроля версий с открытым исходным кодом (DVCS). Используйте этот тег для вопросов об использовании Git и рабочих процессах. Не используйте этот тег для общих вопросов по программированию, связанных с репозиторием Git. Не используйте этот тег для вопросов GitHub/GitHub Actions, не связанных с использованием git; вместо этого используйте [github] или [github-actions]. Не используйте тег [github] для проблем, связанных с Git, только потому, что репозиторий размещен на GitHub.
git show foo
)