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

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

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

Примере:

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

6
Ionică Bizău 3 Сен 2014 в 15:09
Что значит нет доступа к репозиторию git? удаленный? местный?
 – 
Davin Tryon
3 Сен 2014 в 15:13
У меня нет доступа для чтения к репозиторию git, где был сделан коммит (если бы он был, я бы сделал только git show foo)
 – 
Ionică Bizău
3 Сен 2014 в 15:15
Ответ, который вы цитируете, не совсем говорит, что он содержит хеш - он говорит, что он сгенерирован из данных, которые включают дату (а также автора, сообщение, патч и т. д.).
 – 
Drew Noakes
3 Сен 2014 в 15:34
Да, но я думал, что хэш можно как-то распарсить. Например, идентификаторы объектов Mongo содержат даты, и их можно анализировать.
 – 
Ionică Bizău
3 Сен 2014 в 15:37
Я отредактировал свой ответ: проект gitbrute может быть близок к тому, что вы ищете, но без каких-либо гарантий.
 – 
VonC
3 Сен 2014 в 15:43

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

5
Community 23 Май 2017 в 15:17
gitbrute кажется классным проектом. Как я могу его использовать? Я уже создал файл (go gitbrute.go).
 – 
Ionică Bizău
3 Сен 2014 в 16:38
Просто передайте свой SHA1
 – 
VonC
3 Сен 2014 в 16:39
./gitbrute 1484e89060b2043be0b71209bacc2254161f1a8f ничего не выводит.
 – 
Ionică Bizău
3 Сен 2014 в 16:42
gitbrute -h предоставит вам варианты: gitbrute -prefix=xxx (см. github.com/bradfitz/gitbrute/blob/master/gitbrute.go#L36-L38)
 – 
VonC
3 Сен 2014 в 16:43
Я уже пробовал это, но я не понимаю использования. Как сгенерировать подобную фиксацию и чем полезен gitbrute для поиска информации о коммите , передавая его хэш?
 – 
Ionică Bizău
3 Сен 2014 в 16:45

Ну вот

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.

0
Vinay Veluri 3 Сен 2014 в 15:31
2
У меня нет доступа к репозиторию. У меня есть только хэш коммита.
 – 
Ionică Bizău
3 Сен 2014 в 15:33
Хорошо. Без доступа к репозиторию git ничего нельзя раскрыть.
 – 
Vinay Veluri
3 Сен 2014 в 15:34
Что делать, если у вас есть доступ к файлам .git? Можно ли тогда что-то придумать?
 – 
George Dimitriadis
15 Июн 2017 в 12:20

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

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

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

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

2
Gabriel Petrovay 3 Сен 2014 в 15:35