¿Es posible get la hora / date de una confirmación conociendo el hash de confirmación pero sin acceso al repository?

Suponiendo que tengo el hash de confirmación pero no tengo acceso al repository de git, ¿es posible get la hora en que se realizó el commit?

¿Cómo puede hacerse esto?

De acuerdo con esta respuesta , los hashes de confirmación contienen dates y horas en que terminaron.

Ejemplo:

1484e89060b2043be0b71209bacc2254161f1a8f se realizó el Wed Sep 3 09:30:59 2014 +0300 .

Como se menciona en " ¿Hay algún peligro al exponer hash de cometer git sha1? ":

No hay absolutamente ninguna forma de correlacionar el hash SHA 1 de un commit de git con el contenido real del commit.

Aunque SHA-1 es nominalmente unidireccional, esto teóricamente permitiría a un atacante, que quiera adivinar el contenido de un object, verificar si su conjetura es correcta o no.
Esto implicaría adivinar exactamente, hasta el último bit, incluyendo marcas de time y otras cosas similares .

Entonces, si no tienes acceso al repository completo de git, eso no parece posible.


Como se menciona en este hilo , lo único que podría hacer con un SHA1 es encontrar un contenido con el mismo SHA1:

El término "reverso" no es la palabra correcta para usar.
Lo que quiere decir es que puede generar otra input para la cual la salida SHA1 coincida con su otra salida SHA1 . Esto es porque SHA1 tiene colisiones.

Así que " foo " podría hacer hash a 1 y " bar " podría hacer hash a 1 también.
No significa que 1 signifique foo , sino que significa que si su contraseña es foo , la bar también funciona cuando se compara con un hash almacenado.

Si la input original no es muy corta, es muy poco probable que se pueda encontrar una input con el mismo hash SHA-1.
Estos ataques funcionan porque las passwords son débiles y SHA-1 es rápido de calcular, no debido a ninguna debilidad de SHA-1 como una function de hash criptográfica.


Nota: que (encontrar un contenido con el mismo SHA1) es en realidad lo que hace el proyecto bradfitz / gitbrute (para "diversión")

gitbrute brute-forces un par de marcas de time autor + committer tales que la confirmación git resultante tiene su prefijo deseado.

Encontrará el time más reciente que satisfaga su prefijo.

Lo mencioné en " ¿Cómo manejaría Git una colisión SHA-1 en una burbuja? "

Aqui tienes

 git log -2 --pretty=tformat:%aD:%H 1484e89060b2043be0b71209bacc2254161f1a8f 

%aD te da la date de creación.

Puedes agregar otras opciones como

 %cn: committer name %an: author name git log -2 --pretty=tformat:%aD:%cn:%an:%H 1484e89060b2043be0b71209bacc2254161f1a8f 

Si desea utilizar Hash abreviado, use %h lugar de %H

Ejecutas esto a través del shell de commands de git.

Probablemente pienses que la ID de commit de git es de alguna manera datos encryptions que contienen cierta información. Pero los ID de commit de Git son hashes:

[…] es el hash SHA-1 – una sum de comprobación del contenido que está almacenando más un encabezado (desde aquí)

También de la teoría criptográfica sabemos que los hashes tienen la propiedad no invertible .

Por lo tanto, no es posible get información sobre la confirmación solo a partir de la ID.