Valide seu certificado
Confirme independentemente a autenticidade de qualquer certificado blockchain Bernstein. Sem necessidade de confiar no servidor.
Verificação zero-trust
Nosso validador foi projetado para que você nunca precise confiar em nós. Tudo acontece no seu navegador.
100% no cliente
Seus arquivos nunca saem do seu dispositivo. Todo o hashing e verificação acontece localmente no seu navegador.
Prova blockchain
Certificados são verificados contra a blockchain Bitcoin imutável - sem necessidade de confiar no servidor.
Funciona offline
Para máxima segurança, você pode desconectar da internet antes de carregar arquivos sensíveis.
Verificação aberta
Qualquer pessoa pode verificar certificados independentemente usando ferramentas criptográficas padrão.
O que você pode verificar
Nosso validador permite provar tanto a existência de arquivos quanto a propriedade de certificados.
Provar existência
Carregue arquivos para verificar se correspondem à impressão digital do certificado registrada na blockchain Bitcoin.
Provar propriedade
Insira suas chaves privadas para provar criptograficamente que você possui o certificado.
Gerar assinaturas
Crie assinaturas criptográficas para provar propriedade a terceiros como tribunais ou investidores.
Compartilhar prova
Exporte dados de verificação que qualquer pessoa pode validar independentemente.
Como a verificação funciona
Nossos certificados usam técnicas criptográficas padrão que podem ser verificadas por qualquer pessoa.
Hash SHA-256
Arquivos são hasheados usando o mesmo algoritmo do Bitcoin. A impressão digital é um identificador único para seus arquivos exatos.
Ancoragem Bitcoin
A impressão digital é incorporada em uma transação Bitcoin, criando um carimbo de tempo imutável no livro-razão mais seguro do mundo.
Carimbos de tempo qualificados e confiáveis
Nos planos Scale e Enterprise, carimbos de tempo qualificados da UE e confiáveis da China acrescentam uma datação independente. O da UE tem presunção legal de exatidão em toda a UE.
Correspondência de impressão digital
Carregue seus arquivos originais. Se a impressão digital calculada corresponder ao registro blockchain, a existência está provada.
O protocolo de registro Bernstein
Entendendo como a Bernstein cria certificados blockchain a partir dos seus arquivos.
A Bernstein ajuda você a criar provas verificáveis de existência e propriedade para qualquer ativo digital. Quando você envia arquivos em um projeto, a Bernstein gera uma impressão digital criptográfica e a registra na blockchain do Bitcoin.
Cada projeto pode conter múltiplos arquivos e evoluir ao longo do tempo. Cada versão que você certifica cria um novo registro blockchain, construindo um histórico completo da sua propriedade intelectual.
Cada certificado Bernstein corresponde a uma transação Bitcoin com três propriedades-chave:
Três chaves criptográficas
Chave do proprietário
Derivada da sua conta. Prova quem é o proprietário do certificado. A chave pública correspondente está impressa no seu certificado PDF.
Chave de dados
Derivada do hash SHA-256 dos arquivos do projeto. Prova quais arquivos estão cobertos pelo certificado.
Chave Bernstein
A chave da plataforma Bernstein, que co-assina a transação. A chave pública correspondente está impressa no seu certificado PDF.
Passos do registro
Seus arquivos são individualmente submetidos a hash SHA-256 e depois combinados em uma única impressão digital do projeto.
A impressão digital do projeto é convertida em uma chave privada Bitcoin, a partir da qual se deriva uma chave pública (a Chave de Dados).
A Chave de Dados, a Chave do Proprietário e a Chave Bernstein são combinadas em um endereço Bitcoin MultiSig 3-de-3.
É criada uma transação Bitcoin enviando fundos para este endereço MultiSig, registrando permanentemente o certificado na blockchain.
O endereço Bitcoin resultante codifica as três chaves - provando quem possuía o quê, e quando. Qualquer pessoa com os arquivos originais e as chaves públicas pode reconstruir independentemente o endereço e verificá-lo na blockchain.
Verificação manual
Você nem precisa das nossas ferramentas. Aqui estão os passos para validar independentemente um certificado Bernstein contra a blockchain Bitcoin usando software criptográfico de código aberto padrão.
O que você precisa antes de começar
- Todos os arquivos do projeto e o arquivo de capa do projeto (disponível para download no aplicativo Bernstein)
- O ID da Transação, exibido no certificado PDF da Bernstein
- A Chave Pública do Proprietário e a Chave Pública da Bernstein, também encontradas no certificado PDF
- Habilidades básicas para operar um terminal de computador
Calcule o hash SHA-256 de cada arquivo individual incluído no projeto. Existem muitos utilitários de software que você pode usar. No Linux ou macOS, execute o seguinte comando no seu terminal:
Comando do terminal:
shasum -a 256 yourfile.pdfUse uma ferramenta no seu próprio computador em vez de um serviço online: seus arquivos nunca precisam sair do seu dispositivo.
SHA-256 é um algoritmo padrão - ele sempre produzirá o mesmo resultado independentemente da ferramenta que você usar.
Lembre-se de também gerar o hash do arquivo de capa do projeto: um arquivo de texto chamado "Cover - <Version ID>.txt" com o título, a descrição, o ID do projeto e o ID da versão. O aplicativo Bernstein o exporta para cada versão certificada.
Combine os hashes em uma única impressão digital do projeto:
- Ordene todos os hashes individuais dos arquivos em ordem alfabética
- Concatene-os em uma única string
- Calcule o hash SHA-256 da string concatenada
Ou faça tudo com um único comando no terminal (protocolo 2):
shasum -a 256 "Cover - <Version ID>.txt" file1.pdf file2.png | cut -d' ' -f1 | LC_ALL=C sort | tr -d '\n' | shasum -a 256O resultado é a impressão digital do seu projeto. Você pode verificá-la comparando com a impressão digital mostrada no aplicativo Bernstein dentro do seu projeto.
Para usar o hash do projeto como uma chave Bitcoin, você precisa convertê-lo do formato HEX para WIF (Wallet Import Format). Fornecemos um script Python para essa conversão.
Primeiro, instale o pacote Python necessário:
pip install base58Salve o seguinte script Python como 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]))
Em seguida, execute o script com o hash do seu projeto:
python hex2wif.py <your-project-hash-hex>O script irá exibir a chave correspondente no formato WIF. Você pode verificar o resultado no aplicativo Bernstein clicando no ícone de chave ao lado do certificado blockchain no seu projeto.
Neste passo, você precisa derivar a chave pública comprimida a partir da chave privada WIF obtida no Passo 2. Esta é uma operação criptográfica padrão do Bitcoin.
Instale os dois pacotes Python de que o script precisa:
pip install base58 ecdsaSalve este script Python como wif2pub.py e execute-o com a chave WIF do Passo 2. Ele funciona offline, no seu computador:
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>Cole a chave WIF do Passo 2 e a ferramenta irá exibir a chave pública comprimida associada. Esta é a Data Public Key - uma das três chaves que compõem o endereço do certificado.
Agora que você derivou a Data Public Key a partir dos seus arquivos, combine-a com a Owner Public Key e a Bernstein Public Key (ambas encontradas no certificado PDF) para construir o endereço Bitcoin MultiSig 3-de-3.
Instale as duas gems Ruby de que o script precisa:
gem install base58 bech32Salve e execute o seguinte 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}"
Execute o script a partir do seu terminal:
ruby multisig.rbSiga as instruções: escolha o tipo de endereço impresso no seu certificado e, em seguida, insira a Owner Public Key, a Data Public Key e a Bernstein Public Key, nessa ordem. Não as ordene: uma ordem diferente gera um endereço diferente. O script exibe o endereço Bitcoin.
O tipo de endereço é independente do protocolo da impressão digital. Certificados emitidos desde agosto de 2018 usam um endereço SegWit P2WSH (começando com bc1q), e os mais antigos um endereço P2SH legado (começando com 3).
Por fim, pesquise o ID da Transação do seu certificado PDF em qualquer explorador de blockchain.
Recomendamos Blockstream.info orBlockchair.com.
Encontre o endereço na lista de saídas da transação e compare-o com o endereço que você calculou no Passo 4.
Parabéns - você provou independentemente a existência e integridade das informações incluídas no seu projeto, sem depender de nenhum terceiro.