Acceder →
Certificados de verificación

Una cadena pública que ni nosotros podemos reescribir.

Cada respuesta con citas, cada verificación y cada borrador de AIM LEX lleva un certificado público con QR. Lo abre tu cliente, un juez o tu aseguradora, sin cuenta, y ve la fecha, las normas citadas, su estado entonces y si han cambiado desde entonces. Llevamos 0 certificados emitidos.

Cómo se protege cada certificado

  1. La huella del texto. No guardamos el texto: solo su SHA-256, calculado sobre el texto normalizado. Quien tenga el documento puede comprobarlo en la página del certificado, y el cálculo se hace en su navegador.
  2. La foto de cada norma. Por cada norma citada se guarda su estado y la huella de su texto oficial en ese momento. La página la compara con el texto de hoy y avisa si la norma se ha actualizado. Y si el Tribunal Supremo la ha anulado, entera o en parte, lo dice con su sentencia.
  3. La cadena. Cada certificado se encadena con el anterior: su eslabón es el SHA-256 del eslabón anterior seguido de la huella de su contenido. Cambiar o insertar uno rompería todos los siguientes.
  4. El ancla diaria. Al cerrar cada día (UTC), el último eslabón se sella con OpenTimestamps en la cadena de bloques de Bitcoin. Desde ese momento, ni AIM LEX puede antedatar ni reescribir un certificado de ese día sin que se note.

Raíces ancladas

La primera raíz se fija al cerrar el primer día con certificados.

Compruébalo tú mismo

La cadena completa, sin identificadores de certificado, está en /certificados/cadena.json (por tramos con ?desde=). Cada certificado publica sus datos en /cert/<id>.json. Con eso basta este programa:

import hashlib, json, urllib.request
base = "https://www.aim-lex.ai"
anterior, desde = "0" * 64, 0
while True:
    tramo = json.load(urllib.request.urlopen(f"{base}/certificados/cadena.json?desde={desde}"))["cadena"]
    if not tramo: break
    for e in tramo:
        assert e["anterior"] == anterior, e["seq"]
        assert hashlib.sha256((e["anterior"] + e["contenido"]).encode()).hexdigest() == e["eslabon"], e["seq"]
        anterior, desde = e["eslabon"], e["seq"]
print("cadena íntegra hasta el eslabón", desde)

# La raíz de un día:  ots verify raiz-AAAA-MM-DD.txt.ots  (cliente libre de OpenTimestamps)

Confianza y seguridad · AIM LEX · cada cita, comprobada contra el BOE