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
Vos fichiers ne quittent jamais votre appareil. Tout le hachage et la vérification se font localement dans votre navigateur.
Preuve blockchain
Les certificats sont vérifiés par rapport à la blockchain Bitcoin, immuable - sans avoir à faire confiance à un serveur.
Fonctionne hors ligne
Pour une sécurité maximale, vous pouvez vous déconnecter d'internet avant d'importer des fichiers sensibles.
Vérification ouverte
N'importe qui peut vérifier un certificat de façon indépendante, avec des outils cryptographiques standard.
Ce que vous pouvez vérifier
Notre validateur vous permet de prouver à la fois l'existence de fichiers et la propriété de certificats.
Prouver l'existence
Importez vos fichiers pour vérifier qu'ils correspondent à l'empreinte du certificat inscrite sur la blockchain Bitcoin.
Prouver la propriété
Entrez vos clés privées pour prouver cryptographiquement que vous possédez le certificat.
Générer des signatures
Créez des signatures cryptographiques pour prouver la propriété à des tiers comme des tribunaux ou des investisseurs.
Partager la preuve
Exportez les données de vérification que n'importe qui peut valider indépendamment.
Comment fonctionne la vérification
Nos certificats utilisent des techniques cryptographiques standards que n'importe qui peut vérifier.
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
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
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
Importez vos fichiers originaux. Si l'empreinte calculée correspond à l'enregistrement blockchain, l'existence est prouvée.
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 :
Trois clés cryptographiques
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
Dérivée du hash SHA-256 de vos fichiers de projet. Prouve quels fichiers sont couverts par le certificat.
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
Vos fichiers sont hachés individuellement en SHA-256, puis combinés en une seule empreinte de projet.
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.
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.
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.
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.pdfUtilisez 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 :
- Triez tous les hashes individuels par ordre alphabétique
- Concaténez-les en une seule chaîne
- 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 256Le 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 base58Enregistrez 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 ecdsaEnregistrez 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 bech32Enregistrez 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.rbSuivez 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.
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.