4. Prova de Trabalho
Para implementar um servidor de carimbo de data/hora distribuído ponto a ponto, precisaremos usar um sistema de prova de trabalho semelhante ao Hashcash de Adam Back[6], em vez de postagens em jornais ou Usenet.
A prova de trabalho envolve a varredura de um valor que, quando hash, como no SHA-256, o hash começa com um número de zero bits. O trabalho médio necessário é exponencial no número de zero bits necessários e pode ser verificado executando um único hash.
Para nossa rede de carimbo de data/hora, implementamos a prova de trabalho incrementando um nonce no bloco até que seja encontrado um valor que forneça ao hash do bloco os zero bits necessários.
Uma vez que o esforço da CPU tenha sido despendido para satisfazer a prova de trabalho, o bloco não pode ser alterado sem refazer o trabalho. À medida que os blocos posteriores são encadeados após ele, o trabalho para alterar o bloco incluiria refazer todos os blocos posteriores.
A prova de trabalho também resolve o problema de determinação da representação na tomada de decisão por maioria. Se a maioria fosse baseada em um endereço IP, um voto, ela poderia ser subvertida por qualquer pessoa capaz de alocar muitos IPs.
A prova de trabalho é essencialmente uma CPU-um-voto. A decisão majoritária é representada pela cadeia mais longa, que possui o maior esforço de prova de trabalho investido nela.
Se a maior parte do poder da CPU for controlada por nós honestos, a cadeia honesta crescerá mais rapidamente e ultrapassará quaisquer cadeias concorrentes
Para modificar um bloco anterior, um invasor teria que refazer a prova de trabalho do bloco e de todos os blocos posteriores e então alcançar e superar o trabalho dos nós honestos.
Mostraremos mais tarde que a probabilidade de um invasor mais lento alcançá-lo diminui exponencialmente à medida que blocos subsequentes são adicionados.
Para compensar o aumento da velocidade do hardware e o interesse variável na execução de nós ao longo do tempo, a dificuldade da prova de trabalho é determinada por uma média móvel visando um número médio de blocos por hora. Se forem gerados muito rápido, a dificuldade aumenta.