A criptografia de código aberto não é melhor do que a criptografia de código-fonte fechado

Uma ideia por trás da lei de Linus é que Código aberto software (OSS) tem menos bugs do que o software de código fechado (CSS), porque mais pessoas têm acesso ao OSS e ao seu código. Consequentemente, mais pessoas usariam o software, leriam seu código-fonte, encontrariam erros nele e relatariam tais bugs. Este post discute essa ideia no contexto de erros de criptografia, que são softwares ou erros lógicos em componentes de criptografia.

Eu gostaria de categorizar erros de criptografia em quatro categorias, com base em como eles são encontrados e como eles são difíceis de encontrar, usando exemplos da minha recente palestra sobre bugs em blockchains (que são muitas vezes erros de criptografia). Esses pensamentos baseiam-se principalmente em minha experiência na revisão de softwares de criptografia, iniciada há uma década, para uma variedade de projetos, sejam empresas iniciantes de tecnologia, grandes empresas, organizações governamentais ou empresas de blockchain.


bitcoin plus

• Erros de uso: são bugs que você pode encontrar usando o aplicativo sem ler o código. Por exemplo, o SHA-512 benigno fora do limite lê os slides 45-49. Para esse tipo de bug, o OSS não necessariamente vence, quando 82% dos projetos no Github têm menos de 45 estrelas (um número que acabei de inventar, mas você entendeu). Em CSS, não percebi uma grande diferença de qualidade entre aplicativos amplamente usados ​​e marginais, sugerindo uma dispersão de erros de uso.

• Erros primitivos: são erros causados ​​por uma escolha errada de criptografia primitiva ou protocolo. Muitas vezes, a leitura da documentação é suficiente, sem sequer se aprofundar no código. Bugs primitivos não eram incomuns dez anos atrás, mas hoje todo mundo tem uma conexão com a Internet e pode aprender sobre os primitivos a serem evitados. Um exemplo recente é o uso de uma função hash vulnerável a colisões em assinaturas IOTA, conforme discutido nos slides 24-25. Em minha experiência, nos últimos anos, o OSS tende a ter menos erros primitivos, uma razão para que o CSS às vezes dependa de outros componentes / herdados e, portanto, não pode escolher totalmente todos os primitivos.

estatísticas de bitcoin

• Erros de uso indevido: é quando a primitiva correta é usada, mas de maneira insegura. Por exemplo, Lisk usa assinaturas Ed25519 e funções hash seguras para gerar endereços muito curtos (veja os slides 17-20). Outras armadilhas comuns incluem cifras de fluxo com tendências propensas a colisão ou número insuficiente de iterações PBKDF2. Esses bugs são mais frequentemente encontrados em revisões de código e são relativamente fáceis de encontrar, embora um pouco mais difíceis do que erros primitivos. Restringindo-nos ao uso indevido de bugs, não acho que tenha visto mais horrores por linha de código no CSS do que no OSS.

bitcoin tempo de garfo

• Hard bugs: Para encontrar esses bugs, o criptografia “Cultura pop” é insuficiente. Você geralmente precisa entender um protocolo ou lógica complexa e ter habilidades específicas – mas não necessariamente avançadas – em domínios como matemática ou linguagens de programação internas. Por exemplo, o bug da libzerocoin discutido nos slides 14-16 não é obviamente aparente para meros revisores de código. Esses bugs podem ser encontrados acidentalmente, mas eles têm mais chances de serem encontrados por pessoas experientes – o tipo de pessoa que não trabalha de graça: seja durante auditorias pagas, ao vender os bugs ou em troca de recompensas por bugs.

O resultado é que, para encontrar os bugs difíceis, você precisa de pessoas que lerão atentamente o código, mas existem muito poucas pessoas e códigos demais, por isso os bugs permanecem no OSS e no CSS. As auditorias de segurança pagas ajudam, mas não encontram todos os bugs, pois tendem a ser mais amplas do que profundas. Mesmo depois de auditorias de segurança por pessoas qualificadas, alguns bugs permanecerão não detectados mesmo em aplicativos amplamente auditados. Mais uma vez, isso se aplica tanto ao OSS quanto ao CSS.

onde conseguir bitcoin

Tudo isso não soa muito original nem específico para erros de criptografia, ao contrário de bugs “normais”. Talvez a diferença seja que os bugs criptográficos tendem a ser mais difíceis de encontrar do que os não-criptografia mas, ao mesmo tempo, sua exploração tende a ser menos complexa: por exemplo, você raramente precisará gravar explorações complexas de código de shell e cadeia para explorar erros de criptografia. No entanto, certas erros de criptografia exigirá maior poder computacional para explorar (como colisões ROCA ou SHA-1).

É claro que esses pontos estão sujeitos a grandes vieses de seleção: baseiam-se apenas nos projetos que analisamos e você pode especular que as empresas que desejam compartilhar seu código-fonte para auditorias ou outras razões o fazem porque estão mais confiantes em a qualidade de seu código (o oposto também é verdadeiro, quando as empresas pedem uma auditoria porque sabem que seu código é uma droga).