Processos Estocásticos
A matemática da incerteza na mineração e segurança do Bitcoin
O Bitcoin é um sistema probabilístico. Blocos são descobertos em intervalos aleatórios, ataques podem ou não ter sucesso, e confirmações são uma aposta calculada — não uma certeza absoluta. A ferramenta matemática que descreve esse tipo de incerteza é o processo estocástico.
Esta página apresenta os processos estocásticos que governam a segurança do Bitcoin: o processo de Poisson (descoberta de blocos), o problema da ruína do jogador (ataque de 51%) e a análise probabilística original de Satoshi no whitepaper.
Conteúdo
O que é um Processo Estocástico?
Aleatoriedade que evolui com o tempo
Um processo estocástico é um modelo matemático de um sistema que evolui ao longo do tempo de maneira parcialmente aleatória. Diferente de um sistema determinístico (onde o estado futuro é completamente determinado pelo estado atual), um processo estocástico incorpora incerteza: você sabe as probabilidades dos possíveis resultados, mas não qual vai acontecer.
Exemplos cotidianos de processos estocásticos incluem:
- O número de chamadas que chegam a uma central telefônica por minuto
- O momento exato em que um átomo decai em material radioativo
- O instante em que o próximo bloco de bitcoin será minerado
Todos esses exemplos compartilham uma característica: eventos ocorrem a uma taxa média conhecida, mas o instante exato de cada evento é imprevisível. Essa é a marca de um processo de Poisson, o processo estocástico mais relevante para o Bitcoin.
Processo de Poisson na Mineração
Blocos são descobertos a uma taxa média, mas em instantes aleatórios
A mineração de blocos no Bitcoin é um processo de Poisson. A cada tentativa de hash, um minerador tem uma probabilidade fixa e muito pequena de encontrar um bloco válido. Como bilhões de tentativas são feitas por segundo pela rede, o resultado agregado é que blocos são descobertos a uma taxa média constante — aproximadamente 1 bloco a cada 10 minutos.
Mas "média de 10 minutos" não significa que blocos chegam exatamente de 10 em 10 minutos. Em alguns intervalos podem ser 2 blocos em 1 minuto; em outros, pode levar 40 minutos para encontrar um único bloco. A variabilidade é inerente ao processo.
Distribuição de Poisson
A probabilidade de encontrar k blocos em um intervalo
A distribuição de Poisson descreve a probabilidade de um dado número de eventos ocorrer em um intervalo fixo de tempo, dado que os eventos acontecem a uma taxa média constante e independentemente uns dos outros.
P(k) = e-λ · λk / k!
Onde λ é o número médio de eventos no intervalo. Para intervalos de 10 minutos, λ = 1 (1 bloco em média). Para intervalos de 1 hora (6 × 10 min), λ = 6.
No caso da mineração de blocos, a probabilidade de encontrar exatamente k blocos em 10 minutos é:
# Probabilidade de encontrar k blocos em 10 minutos
# taxa media (lambda) = 1 bloco a cada 10 min
def poisson(k, lambda_=1.0)
Math.exp(-lambda_) * (lambda_**k) / (1..k).reduce(1, :*)
end
puts poisson(0) #=> 0.3679 (36.8% — nenhum bloco)
puts poisson(1) #=> 0.3679 (36.8% — exatamente 1 bloco)
puts poisson(2) #=> 0.1839 (18.4% — 2 blocos)
puts poisson(3) #=> 0.0613 ( 6.1% — 3 blocos)
puts poisson(4) #=> 0.0153 ( 1.5% — 4 blocos) Isso significa que, em qualquer janela de 10 minutos, há 36,8% de chance de não vir bloco nenhum — mesmo sendo a média. É por isso que o tempo entre blocos às vezes é muito maior que 10 minutos.
A probabilidade de pelo menos um bloco em 10 minutos é 1 − P(0) = 63,2%. Em 30 minutos (λ = 3), a chance de nenhum bloco cai para P(0) = e−3 ≈ 5%, e de pelo menos um sobe para 95%.
Tempo entre blocos
Distribuição exponencial e a memória do processo
Uma propriedade fundamental do processo de Poisson é que o tempo entre eventos segue uma distribuição exponencial. Isso significa que o tempo que falta para o próximo bloco ser minerado não depende de quanto tempo já passou desde o último bloco.
Se já se passaram 20 minutos desde o último bloco, o tempo esperado para o próximo bloco continua sendo 10 minutos. O processo não "acumula" tempo — ele não tem memória. Essa propriedade, chamada de falta de memória (memorylessness), é exclusiva da distribuição exponencial.
Na prática, isso significa que esperar um bloco demorado não torna o próximo mais provável de vir rápido. Cada tentativa de hash é independente das anteriores, e a rede coletivamente continua minerando à mesma taxa de sempre.
Forks naturais como eventos de Poisson
Quando dois blocos são encontrados ao mesmo tempo
Como blocos são descobertos em instantes aleatórios, é possível (e esperado) que dois mineradores encontrem um bloco válido quase ao mesmo tempo. Cada um propaga seu bloco pela rede, criando uma bifurcação temporária — um fork natural.
Do ponto de vista estocástico, a probabilidade de dois blocos serem encontrados em um intervalo muito curto (menor que o tempo de propagação na rede, ~segundos) é a cauda superior da distribuição de Poisson. Quanto mais poder de hash a rede tem e mais rápida a propagação, menor a chance de forks naturais. É por isso que blocos grandes (que demoram mais para propagar) aumentam a taxa de forks — e por isso o Bitcoin Core limita o tamanho dos blocos.
Ruína do Jogador
O problema de um apostador contra um oponente com recursos infinitos
O segundo processo estocástico fundamental para a segurança do Bitcoin é o problema da ruína do jogador (gambler's ruin). Imagine um apostador com fichas finitas jogando contra um cassino com recursos virtualmente infinitos. O apostador quebra se perder todas as fichas. Qual a probabilidade de ele dobrar seu dinheiro antes de quebrar?
No Bitcoin, o "apostador" é o atacante tentando construir uma cadeia mais longa que a cadeia honesta. A "fortuna" de cada lado é a vantagem em blocos que ele já tem. O atacante está atrás por z blocos e precisa alcançar e ultrapassar os mineradores honestos.
A corrida atacante × rede honesta
A probabilidade de o atacante alcançar a cadeia honesta
Suponha que o atacante tenha uma fração q do poder de hash total (q < 0,5 para que o ataque não seja trivial). Os honestos têm p = 1 − q. A cada bloco, a vantagem do atacante muda como uma caminhada aleatória (random walk): ele ganha 1 bloco com probabilidade q, perde 1 bloco com probabilidade p.
A probabilidade de o atacante, partindo de 0 blocos de vantagem, algum dia alcançar uma vantagem de z blocos é análoga à probabilidade de sucesso na ruína do jogador. No caso do ataque de 51%, o atacante está atrás por z blocos e precisa alcançar os honestos (vantagem = 0).
Quando q < p (atacante com menos da metade do poder de hash), a probabilidade de ele eventualmente alcançar a cadeia honesta diminui exponencialmente com z:
# p = prob. de um nó honesto encontrar o prox. bloco
# q = prob. de o atacante encontrar o prox. bloco
# z = blocos de vantagem que o atacante precisa recuperar
def attacker_catch_up(q, z)
p = 1 - q
# probabilidade de o atacante nunca alcançar
# (forma simplificada: razao (q/p)^(z+1) para q < 0.5)
(q / p)**(z + 1)
end
# Com 10% do poder de hash (q=0.1):
puts attacker_catch_up(0.1, 0) # 0.1111 — 11% alcanca de 1 bloco
puts attacker_catch_up(0.1, 1) # 0.0123 — 1% alcanca de 2 blocos
puts attacker_catch_up(0.1, 5) # 1.9e-06 — 0.0002% Isso mostra que mesmo um atacante com 10% do poder de hash total tem 11% de chance de alcançar a cadeia honesta se estiver apenas 1 bloco atrás. Mas essa chance cai rapidamente: para 6 blocos atrás, é de apenas 1 em 50.000.
A forma simplificada (q/p)^(z+1) é uma aproximação válida quando z é pequeno e q << p. Para valores precisos, usa-se a equação completa de Satoshi, que incorpora a distribuição de Poisson dos blocos encontrados pelo atacante.
A Análise de Satoshi
Seção 11 do whitepaper: a probabilidade de um ataque reverter confirmações
Na seção 11 do whitepaper do Bitcoin, Satoshi Nakamoto combinou os dois processos — Poisson e ruína do jogador — em uma única equação que calcula a probabilidade de um atacante conseguir substituir z blocos da blockchain.
A intuição é: o atacante segue uma distribuição de Poisson com taxa λ = z · q/p (o número esperado de blocos que ele consegue minerar enquanto os honestos mineram z blocos). Para cada possível número de blocos k que ele pode minerar nesse período, calculamos a probabilidade de ele conseguir alcançar os honestos a partir desse ponto. Somamos tudo.
# p = prob. de um nó honesto encontrar o prox. bloco
# q = prob. de o atacante encontrar o prox. bloco
# z = blocos que o atacante precisa recuperar
def attacker_success_probability(q, z)
p = 1 - q
lambda = z * (q / p)
sum = 1.0
for k in 0..z
poisson = Math.exp(-lambda)
for i in 1..k
poisson *= lambda / i
end
sum -= poisson * (1 - (q / p)**(z - k))
end
return sum
end
# Tabela de probabilidades (fonte: whitepaper §11):
# q=0.1, z=0 => 100%
# q=0.1, z=1 => 20.4%
# q=0.1, z=2 => 5.7%
# q=0.1, z=3 => 1.8%
# q=0.1, z=4 => 0.6%
# q=0.1, z=5 => 0.2%
# q=0.1, z=6 => 0.06% <--- 6 confirmacoes
# q=0.3, z=6 => 11.7% <--- 30% do hash ainda tem 12% de chance O significado de 6 confirmações
Por que 6 blocos é o padrão da indústria
A tabela gerada pela equação de Satoshi mostra que, para um atacante com 10% do poder de hash (q=0,1), a probabilidade de reverter uma transação após 6 confirmações é de aproximadamente 0,06% — ou 1 em 1.667.
Esse é o motivo pelo qual a maioria das exchanges e serviços espera 6 confirmações (≈1 hora) para aceitar um pagamento como final. Não é uma certeza absoluta, mas um risco aceitável para a maioria dos cenários.
Para diferentes níveis de poder de hash do atacante, o número de confirmações necessário para atingir o mesmo nível de segurança varia dramaticamente:
- q = 10%, z = 6 → 0,06% de chance de reversão (padrão da indústria)
- q = 20%, z = 6 → 2,4% de chance (25× maior que q=0,1)
- q = 30%, z = 6 → 11,7% de chance (195× maior)
- q = 10%, z = 3 → 1,8% de chance (equivalente a q=0,2 com 6 confirmações)
Para uma transação de alto valor, você pode esperar mais confirmações. Para uma compra de café, zero confirmações (transação vista na rede, mas ainda não minerada) pode ser aceitável — o risco de um ataque de 51% específico para essa transação é menor que o custo de realizá-lo.
Você pode testar diferentes cenários com o simulador interativo abaixo:
Simulador de Ataque
Limitações do modelo
O mundo real não é uma equação
A análise de Satoshi, embora elegantemente matemática, faz algumas simplificações que nem sempre se sustentam na prática:
- A taxa q é constante. Na realidade, o poder de hash de um atacante pode variar — ele pode alugar hash power temporariamente, ou a distribuição de mineração pode mudar durante o ataque.
- Não há custo. O modelo ignora o custo elétrico e de hardware de minerar. Na prática, o custo econômico de um ataque de 51% é um dissuasor tão forte quanto a probabilidade matemática.
- A rede é instantânea. O modelo assume que blocos honestos se propagam instantaneamente. Na prática, atrasos de propagação dão vantagem ao atacante (ele pode esconder blocos que minerou e revelá-los de uma vez).
- Não há selfish mining. Estratégias como selfish mining (mineração egoísta) podem amplificar a vantagem de um atacante com menos de 50% do poder de hash, algo que o modelo de Satoshi não captura.
Apesar dessas limitações, o modelo estocástico continua sendo a base da nossa compreensão da segurança do Bitcoin. Ele fornece uma estrutura quantitativa para responder à pergunta mais fundamental do sistema: quando uma transação é realmente final?
Recursos
- Bitcoin: A Peer-to-Peer Electronic Cash System — Seção 11 do whitepaper original de Satoshi Nakamoto.
- Analysis of Bitcoin's Security Model — Exploração detalhada dos parâmetros da equação de Satoshi.
- Confirmações — Bitcoin Wiki sobre o número de confirmações e segurança.
- Analysis of Bitcoin Transaction Reversal Probabilities — Rosenfeld (2012): análise aprofundada incorporando custo e propagação de rede.