Verifica il tuo certificato
Conferma in autonomia l'autenticità di qualsiasi certificato blockchain Bernstein. Non devi fidarti di nessun server.
Verifica zero-trust
Il nostro validatore è progettato perché tu non debba mai fidarti di noi. Tutto avviene nel tuo browser.
100% lato client
I tuoi file non lasciano mai il tuo dispositivo. Tutto l'hashing e la verifica avvengono localmente nel tuo browser.
Prova blockchain
I certificati si verificano sulla blockchain Bitcoin, che è immutabile, senza dover riporre fiducia in un server.
Funziona offline
Per la massima sicurezza, puoi disconnetterti da internet prima di caricare file sensibili.
Verifica aperta
Chiunque può verificare i certificati in autonomia, con strumenti crittografici standard.
Cosa puoi verificare
Con il nostro validatore dimostri sia l'esistenza dei file sia la titolarità dei certificati.
Dimostra l'esistenza
Carica i file per verificare che corrispondano all'impronta del certificato registrata sulla blockchain Bitcoin.
Dimostra la titolarità
Inserisci le tue chiavi private per dimostrare crittograficamente di essere titolare del certificato.
Genera firme
Crea firme crittografiche per dimostrare la titolarità a terzi, come giudici o investitori.
Condividi la prova
Esporta i dati di verifica, che chiunque può validare in autonomia.
Come funziona la verifica
I nostri certificati utilizzano tecniche crittografiche standard verificabili da chiunque.
Hashing SHA-256
I file vengono hashati utilizzando lo stesso algoritmo di Bitcoin. L'impronta è un identificatore unico per i tuoi file esatti.
Ancoraggio Bitcoin
L'impronta viene incorporata in una transazione Bitcoin e produce una marca temporale immutabile sul registro più sicuro al mondo.
Marche temporali qualificate e affidabili
Nei piani Scale ed Enterprise, le marche temporali qualificate UE e affidabili cinesi aggiungono una datazione indipendente. Quella UE gode di una presunzione legale di accuratezza in tutta l'Unione europea.
Corrispondenza dell'impronta
Carica i tuoi file originali. Se l'impronta calcolata coincide con la registrazione sulla blockchain, l'esistenza è provata.
Il protocollo di registrazione Bernstein
Come Bernstein trasforma i tuoi file in certificati blockchain.
Con Bernstein costruisci una prova verificabile di esistenza e titolarità per qualsiasi asset digitale. Quando carichi file in un progetto, Bernstein ne genera l'impronta crittografica e la registra sulla blockchain Bitcoin.
Ogni progetto può contenere più file ed evolvere nel tempo. Ogni versione che certifichi crea una nuova registrazione sulla blockchain e costruisce una traccia verificabile completa della tua proprietà intellettuale.
Ogni certificato Bernstein corrisponde a una transazione Bitcoin con tre proprietà chiave:
Tre chiavi crittografiche
Chiave del proprietario
Derivata dal tuo account. Prova chi è titolare del certificato. La chiave pubblica corrispondente è stampata sul tuo certificato PDF.
Chiave dati
Derivata dall'hash SHA-256 dei file del progetto. Prova quali file sono coperti dal certificato.
Chiave Bernstein
La chiave della piattaforma Bernstein, che co-firma la transazione. La chiave pubblica corrispondente è stampata sul tuo certificato PDF.
Fasi di registrazione
I tuoi file vengono sottoposti individualmente a hash SHA-256, poi combinati in un'unica impronta di progetto.
L'impronta del progetto viene convertita in una chiave privata Bitcoin, dalla quale si deriva una chiave pubblica (la Chiave Dati).
La Chiave Dati, la Chiave del Proprietario e la Chiave Bernstein vengono combinate in un indirizzo Bitcoin MultiSig 3-di-3.
Viene creata una transazione Bitcoin che invia fondi a questo indirizzo MultiSig, registrando permanentemente il certificato sulla blockchain.
L'indirizzo Bitcoin che ne risulta codifica tutte e tre le chiavi e prova chi era titolare di che cosa, e quando. Chiunque disponga dei file originali e delle chiavi pubbliche può ricostruire l'indirizzo in autonomia e riscontrarlo sulla blockchain.
Verifica manuale
I nostri strumenti non ti servono nemmeno. Ecco i passaggi per verificare in autonomia un certificato Bernstein sulla blockchain Bitcoin, usando software crittografico open source standard.
Cosa ti serve prima di iniziare
- Tutti i file del progetto e il file di copertina del progetto (scaricabile dall'app Bernstein)
- Il Transaction ID, visualizzato sul certificato Bernstein in PDF
- La Owner Public Key e la Bernstein Public Key, anch'esse presenti sul certificato PDF
- Competenze di base per utilizzare un terminale del computer
Calcola l'hash SHA-256 di ogni singolo file incluso nel progetto. Esistono numerosi strumenti software che puoi utilizzare. Su Linux o macOS, esegui il seguente comando nel terminale:
Comando terminale:
shasum -a 256 yourfile.pdfUsa uno strumento sul tuo computer anziché un servizio online: i tuoi file non devono mai lasciare il tuo dispositivo.
SHA-256 è un algoritmo standard: produrrà sempre lo stesso risultato indipendentemente dallo strumento utilizzato.
Ricorda di calcolare anche l'hash del file di copertina del progetto: un file di testo chiamato "Cover - <Version ID>.txt" con il titolo, la descrizione, l'ID del progetto e l'ID della versione. L'app Bernstein lo esporta per ogni versione certificata.
Combina gli hash in un'unica impronta del progetto:
- Ordina alfabeticamente tutti gli hash dei singoli file
- Concatenali in un'unica stringa
- Calcola l'hash SHA-256 della stringa concatenata
Oppure fai tutto con un unico comando da terminale (protocollo 2):
shasum -a 256 "Cover - <Version ID>.txt" file1.pdf file2.png | cut -d' ' -f1 | LC_ALL=C sort | tr -d '\n' | shasum -a 256Il risultato è l'impronta del tuo progetto. Puoi verificarla confrontandola con l'impronta mostrata nell'app Bernstein sotto il tuo progetto.
Per utilizzare l'hash del progetto come chiave Bitcoin, devi convertirlo dal formato HEX al formato WIF (Wallet Import Format). Forniamo uno script Python per questa conversione.
Per prima cosa, installa il pacchetto Python necessario:
pip install base58Salva il seguente script Python come 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]))
Quindi esegui lo script con l'hash del tuo progetto:
python hex2wif.py <your-project-hash-hex>Lo script restituirà la chiave corrispondente in formato WIF. Puoi verificare il risultato nell'app Bernstein cliccando sull'icona della chiave accanto al certificato blockchain nel tuo progetto.
In questo passaggio, devi derivare la chiave pubblica compressa dalla chiave privata WIF ottenuta nel Passo 2. Si tratta di un'operazione crittografica Bitcoin standard.
Installa i due pacchetti Python necessari allo script:
pip install base58 ecdsaSalva questo script Python come wif2pub.py ed eseguilo con la chiave WIF del Passo 2. Funziona offline, sul tuo computer:
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>Incolla la chiave WIF dal Passo 2 e lo strumento restituirà la chiave pubblica compressa associata. Questa è la Data Public Key, una delle tre chiavi che compongono l'indirizzo del certificato.
Ora che hai derivato la Data Public Key dai tuoi file, combinala con la Owner Public Key e la Bernstein Public Key (entrambe presenti sul certificato PDF) per costruire l'indirizzo Bitcoin MultiSig 3-di-3.
Installa le due gem Ruby necessarie allo script:
gem install base58 bech32Salva ed esegui il seguente script Ruby:
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}"
Esegui lo script dal terminale:
ruby multisig.rbSegui le istruzioni: scegli il tipo di indirizzo riportato sul certificato, poi inserisci la Owner Public Key, la Data Public Key e la Bernstein Public Key, in quest'ordine. Non ordinarle: un ordine diverso produce un indirizzo diverso. Lo script restituisce l'indirizzo Bitcoin.
Il tipo di indirizzo è indipendente dal protocollo dell'impronta. I certificati da agosto 2018 usano un indirizzo SegWit P2WSH (che inizia con bc1q), quelli più vecchi un indirizzo legacy P2SH (che inizia con 3).
Infine, cerca il Transaction ID dal tuo certificato PDF su qualsiasi blockchain explorer.
Consigliamo Blockstream.info orBlockchair.com.
Trova l'indirizzo nell'elenco degli output della transazione e confrontalo con l'indirizzo che hai calcolato nel Passo 4.
Congratulazioni: hai dimostrato in modo indipendente l'esistenza e l'integrità delle informazioni incluse nel tuo progetto, senza affidarti a terze parti.