Предположим, что у меня есть хэш фиксации, но у меня нет доступа к репозиторию git, возможно ли узнать время, когда была сделана фиксация?

Как это может быть сделано?

Согласно этому ответу, хэши фиксации содержат дату и время, когда они были выполнены.

Примере:

1484e89060b2043be0b71209bacc2254161f1a8f было произведено Wed Sep 3 09:30:59 2014 +0300.

5
Ionică Bizău 3 Сен 2014 в 15:09

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 на большом двоичном объекте?"

4
Community 23 Май 2017 в 12:17

Ну вот

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.

1
VinayVeluri 3 Сен 2014 в 11:31

Вы, наверное, думаете, что git commit ID - это каким-то образом зашифрованные данные, содержащие некоторую информацию. Но идентификаторы коммитов Git - это хэши:

[...] - это хэш SHA-1 - контрольная сумма содержимого, которое вы храните, плюс заголовок (отсюда)

Также из криптографической теории мы знаем, что хэши обладают свойством необратимости.

Таким образом, невозможно получить какую-либо информацию о фиксации только по идентификатору.

1
Gabriel Petrovay 3 Сен 2014 в 11:35