Verificação

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

100% no cliente

Seus arquivos nunca saem do seu dispositivo. Todo o hashing e verificação acontece localmente no seu navegador.

Prova blockchain

Prova blockchain

Certificados são verificados contra a blockchain Bitcoin imutável - sem necessidade de confiar no servidor.

Funciona offline

Funciona offline

Para máxima segurança, você pode desconectar da internet antes de carregar arquivos sensíveis.

Verificação aberta

Verificação aberta

Qualquer pessoa pode verificar certificados independentemente usando ferramentas criptográficas padrão.

Capacidades

O que você pode verificar

Nosso validador permite provar tanto a existência de arquivos quanto a propriedade de certificados.

01

Provar existência

Carregue arquivos para verificar se correspondem à impressão digital do certificado registrada na blockchain Bitcoin.

02

Provar propriedade

Insira suas chaves privadas para provar criptograficamente que você possui o certificado.

03

Gerar assinaturas

Crie assinaturas criptográficas para provar propriedade a terceiros como tribunais ou investidores.

04

Compartilhar prova

Exporte dados de verificação que qualquer pessoa pode validar independentemente.

Técnico

Como a verificação funciona

Nossos certificados usam técnicas criptográficas padrão que podem ser verificadas por qualquer pessoa.

Hash SHA-256

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

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

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

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.

Protocolo

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:

  • Pública - visível para qualquer pessoa na rede Bitcoin
  • Com carimbo de tempo - ancorada a um bloco específico com data e hora precisas
  • Imutável - não pode ser alterada ou excluída depois de confirmada

Três chaves criptográficas

Chave do proprietário

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

Chave de dados

Derivada do hash SHA-256 dos arquivos do projeto. Prova quais arquivos estão cobertos pelo certificado.

Chave Bernstein

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

01

Seus arquivos são individualmente submetidos a hash SHA-256 e depois combinados em uma única impressão digital do projeto.

02

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).

03

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.

04

É 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.

Avançado

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.pdf

Use 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:
  1. Ordene todos os hashes individuais dos arquivos em ordem alfabética
  2. Concatene-os em uma única string
  3. 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 256

O 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 base58

Salve 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 ecdsa

Salve 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 bech32

Salve 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.rb

Siga 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.

Se os endereços corresponderem, a verificação foi bem-sucedida!

Parabéns - você provou independentemente a existência e integridade das informações incluídas no seu projeto, sem depender de nenhum terceiro.

Pronto para verificar?

Insira o ID do seu certificado para validar independentemente sua autenticidade.