Vérification

Vérifiez votre certificat et son horodatage

Confirmez indépendamment l'authenticité de tout certificat blockchain Bernstein. Aucune confiance serveur requise.

Vérification zero-trust

Notre validateur est conçu pour que vous n'ayez jamais à nous faire confiance. Tout se passe dans votre navigateur.

100 % côté client

100 % côté client

Vos fichiers ne quittent jamais votre appareil. Tout le hachage et la vérification se font localement dans votre navigateur.

Preuve blockchain

Preuve blockchain

Les certificats sont vérifiés par rapport à la blockchain Bitcoin, immuable - sans avoir à faire confiance à un serveur.

Fonctionne hors ligne

Fonctionne hors ligne

Pour une sécurité maximale, vous pouvez vous déconnecter d'internet avant d'importer des fichiers sensibles.

Vérification ouverte

Vérification ouverte

N'importe qui peut vérifier un certificat de façon indépendante, avec des outils cryptographiques standard.

Capacités

Ce que vous pouvez vérifier

Notre validateur vous permet de prouver à la fois l'existence de fichiers et la propriété de certificats.

01

Prouver l'existence

Importez vos fichiers pour vérifier qu'ils correspondent à l'empreinte du certificat inscrite sur la blockchain Bitcoin.

02

Prouver la propriété

Entrez vos clés privées pour prouver cryptographiquement que vous possédez le certificat.

03

Générer des signatures

Créez des signatures cryptographiques pour prouver la propriété à des tiers comme des tribunaux ou des investisseurs.

04

Partager la preuve

Exportez les données de vérification que n'importe qui peut valider indépendamment.

Technique

Comment fonctionne la vérification

Nos certificats utilisent des techniques cryptographiques standards que n'importe qui peut vérifier.

Hachage SHA-256

Hachage SHA-256

Les fichiers sont hachés en utilisant le même algorithme que Bitcoin. L'empreinte est un identifiant unique pour vos fichiers exacts.

Ancrage Bitcoin

Ancrage Bitcoin

L'empreinte est intégrée dans une transaction Bitcoin, créant un horodatage immuable sur le registre le plus sécurisé au monde.

Horodatages qualifiés et de confiance

Horodatages qualifiés et de confiance

Avec les forfaits Scale et Enterprise, des horodatages qualifiés européens et de confiance chinois ajoutent une datation indépendante. L'horodatage européen bénéficie d'une présomption légale d'exactitude dans toute l'UE.

Correspondance d'empreinte

Correspondance d'empreinte

Importez vos fichiers originaux. Si l'empreinte calculée correspond à l'enregistrement blockchain, l'existence est prouvée.

Protocole

Le protocole d'enregistrement Bernstein

Comprendre comment Bernstein crée des certificats blockchain à partir de vos fichiers.

Bernstein vous aide à créer une preuve vérifiable d'existence et de propriété pour tout actif numérique. Lorsque vous importez des fichiers dans un projet, Bernstein génère une empreinte cryptographique et l'inscrit sur la blockchain Bitcoin.

Chaque projet peut contenir plusieurs fichiers et évoluer dans le temps. Chaque version que vous certifiez crée un nouvel enregistrement blockchain, constituant un historique complet de votre propriété intellectuelle.

Chaque certificat Bernstein correspond à une transaction Bitcoin avec trois propriétés clés :

  • Publique - visible par tous sur le réseau Bitcoin
  • Horodatée - ancrée à un bloc spécifique avec une date et heure précises
  • Immuable - ne peut être ni modifiée ni supprimée une fois confirmée

Trois clés cryptographiques

Clé du propriétaire

Clé du propriétaire

Dérivée de votre compte. Prouve qui possède le certificat. La clé publique correspondante est imprimée sur votre certificat PDF.

Clé de données

Clé de données

Dérivée du hash SHA-256 de vos fichiers de projet. Prouve quels fichiers sont couverts par le certificat.

Clé Bernstein

Clé Bernstein

La clé de plateforme de Bernstein, qui co-signe la transaction. La clé publique correspondante est imprimée sur votre certificat PDF.

Étapes d'enregistrement

01

Vos fichiers sont hachés individuellement en SHA-256, puis combinés en une seule empreinte de projet.

02

L'empreinte du projet est convertie en clé privée Bitcoin, à partir de laquelle une clé publique (la clé de données) est dérivée.

03

La clé de données, la clé du propriétaire et la clé Bernstein sont combinées en une adresse Bitcoin MultiSig 3-sur-3.

04

Une transaction Bitcoin est créée envoyant des fonds à cette adresse MultiSig, enregistrant définitivement le certificat sur la blockchain.

L'adresse Bitcoin résultante encode les trois clés - prouvant qui possédait quoi, et quand. Toute personne disposant des fichiers originaux et des clés publiques peut reconstruire indépendamment l'adresse et la vérifier sur la blockchain.

Avancé

Vérification manuelle

Vous n'avez même pas besoin de nos outils. Voici les étapes pour valider vous-même un certificat Bernstein par rapport à la blockchain Bitcoin, avec des logiciels cryptographiques open source courants.

Ce dont vous avez besoin avant de commencer
  • Tous les fichiers du projet et le fichier de couverture du projet (téléchargeables depuis l'application Bernstein)
  • L'identifiant de transaction (Transaction ID), affiché sur le certificat Bernstein au format PDF
  • La clé publique du propriétaire (Owner Public Key) et la clé publique Bernstein (Bernstein Public Key), également présentes sur le certificat PDF
  • Des compétences de base pour utiliser un terminal informatique

Calculez le hash SHA-256 de chaque fichier individuel inclus dans le projet. Il existe de nombreux utilitaires pour cela. Sous Linux ou macOS, exécutez la commande suivante dans votre terminal :

Commande terminal :

shasum -a 256 yourfile.pdf

Utilisez un outil installé sur votre ordinateur plutôt qu'un service en ligne : vos fichiers n'ont jamais besoin de quitter votre appareil.

SHA-256 est un algorithme standard - il produira toujours le même résultat quel que soit l'outil utilisé.

N'oubliez pas de hacher également le fichier de couverture du projet : un fichier texte nommé « Cover - <Version ID>.txt » contenant le titre, la description, l'identifiant du projet et l'identifiant de version. L'application Bernstein l'exporte pour chaque version certifiée.

Combinez les hashes en une seule empreinte de projet :
  1. Triez tous les hashes individuels par ordre alphabétique
  2. Concaténez-les en une seule chaîne
  3. Calculez le hash SHA-256 de la chaîne concaténée

Ou faites tout en une seule commande dans le terminal (protocole 2) :

shasum -a 256 "Cover - <Version ID>.txt" file1.pdf file2.png | cut -d' ' -f1 | LC_ALL=C sort | tr -d '\n' | shasum -a 256

Le résultat est l'empreinte de votre projet. Vous pouvez la vérifier par rapport à l'empreinte affichée dans l'application Bernstein sous votre projet.

Pour utiliser le hash du projet comme clé Bitcoin, vous devez le convertir du format HEX au format WIF (Wallet Import Format). Nous fournissons un script Python pour cette conversion.

Commencez par installer le package Python requis :

pip install base58

Enregistrez le script Python suivant sous le nom hex2wif.py :

import sys, hashlib, base58

def hex_to_wif(hex_key):
    extended = "80" + hex_key + "01"
    first_sha = hashlib.sha256(bytes.fromhex(extended)).digest()
    second_sha = hashlib.sha256(first_sha).digest()
    checksum = second_sha[:4].hex()
    return base58.b58encode(bytes.fromhex(extended + checksum)).decode()

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python hex2wif.py <your-project-hash-hex>")
        sys.exit(1)
    print(hex_to_wif(sys.argv[1]))

Puis exécutez le script avec votre hash de projet :

python hex2wif.py <your-project-hash-hex>

Le script affichera la clé correspondante au format WIF. Vous pouvez vérifier le résultat dans l'application Bernstein en cliquant sur l'icône de clé à côté du certificat blockchain dans votre projet.

Dans cette étape, vous devez dériver la clé publique compressée à partir de la clé privée WIF obtenue à l'Étape 2. Il s'agit d'une opération cryptographique Bitcoin standard.

Installez les deux packages Python nécessaires au script :

pip install base58 ecdsa

Enregistrez ce script Python sous le nom wif2pub.py et exécutez-le avec la clé WIF de l'étape 2. Il fonctionne hors ligne, sur votre ordinateur :

import sys, base58
from ecdsa import SECP256k1, SigningKey

raw = base58.b58decode_check(sys.argv[1])
assert raw[0] == 0x80 and len(raw) == 34 and raw[33] == 0x01, "not a compressed mainnet WIF key"
key = SigningKey.from_string(raw[1:33], curve=SECP256k1).get_verifying_key()
print(key.to_string("compressed").hex())
python wif2pub.py <your-wif-key>

Collez la clé WIF de l'étape 2 et l'outil affichera la clé publique compressée associée. C'est la clé publique de données - l'une des trois clés qui composent l'adresse du certificat.

Maintenant que vous avez dérivé la clé publique de données à partir de vos fichiers, combinez-la avec la clé publique du propriétaire (Owner Public Key) et la clé publique Bernstein (Bernstein Public Key) - toutes deux présentes sur le certificat PDF - pour construire l'adresse Bitcoin MultiSig 3-sur-3.

Installez les deux gems Ruby nécessaires au script :

gem install base58 bech32

Enregistrez et exécutez le script Ruby suivant :

require 'digest'
require 'base58'
require 'bech32'

def decode_hex(hex)
  [hex].pack('H*')
end

def sha256(data)
  Digest::SHA256.digest(data)
end

def hash160(data)
  Digest::RMD160.digest(sha256(data))
end

# The 3-of-3 redeem script, keys in Bernstein's fixed order: owner, data, Bernstein. Do NOT sort them.
def redeem_script(keys)
  script = "\x53".b # OP_3
  keys.each { |k| script << [k.length / 2].pack('C') << decode_hex(k) }
  script << "\x53\xae".b # OP_3 OP_CHECKMULTISIG
end

# Legacy P2SH - addresses starting with 3
def p2sh_multisig(keys)
  payload = "\x05".b + hash160(redeem_script(keys))
  checksum = sha256(sha256(payload))[0..3]
  Base58.binary_to_base58(payload + checksum, :bitcoin)
end

# P2WSH (SegWit) - addresses starting with bc1q
def p2wsh_multisig(keys)
  segwit = Bech32::SegwitAddr.new
  segwit.hrp = 'bc'
  segwit.ver = 0
  segwit.prog = sha256(redeem_script(keys)).unpack('C*')
  segwit.addr
end

puts "Select the address type printed on your certificate:"
puts "1 - P2SH (legacy, address starts with 3)"
puts "2 - P2WSH (SegWit, address starts with bc1q)"
version = gets.chomp.to_i

keys = []
%w[Owner Data Bernstein].each do |name|
  print "Enter #{name} Public Key: "
  keys << gets.chomp
end

address = version == 1 ? p2sh_multisig(keys) : p2wsh_multisig(keys)
puts "\nBitcoin Address: #{address}"

Exécutez le script depuis votre terminal :

ruby multisig.rb

Suivez les instructions : choisissez le type d'adresse indiqué sur votre certificat, puis saisissez dans cet ordre la clé publique du propriétaire, la clé publique de données et la clé publique Bernstein. Ne les triez pas : un ordre différent donne une adresse différente. Le script affiche l'adresse Bitcoin.

Le type d'adresse est indépendant du protocole d'empreinte. Les certificats émis depuis août 2018 utilisent une adresse SegWit P2WSH (commençant par bc1q), les plus anciens une adresse P2SH classique (commençant par 3).

Enfin, recherchez l'identifiant de transaction (Transaction ID) de votre certificat PDF sur n'importe quel explorateur blockchain.

Nous recommandons Blockstream.info orBlockchair.com.

Trouvez l'adresse dans la liste des sorties de la transaction et comparez-la avec l'adresse que vous avez calculée à l'Étape 4.

Si les adresses correspondent, la vérification est réussie !

Félicitations - vous avez prouvé de manière indépendante l'existence et l'intégrité des informations incluses dans votre projet, sans dépendre d'un tiers.

Prêt à vérifier ?

Entrez l'ID de votre certificat pour valider indépendamment son authenticité.