Quebrando a criptografia RSA
Este artigo visa descrever as etapas e os códigos fontes que permitiram vencer o desafio RSA, promovido aqui no VOL, como parte do artigo "Criptografia Assimétrica com o RSA", de Elgio Schlemer.
Apresentação
Saudações, linuxers. Recentemente um desafio de criptografia foi postado aqui no Viva o Linux como parte de um artigo sobre o tema de nome Criptografia assimétrica com RSA. Previamente muitos outros artigos relacionados foram publicados sobre os métodos matemáticos e computacionais dos algorítimos criptográficos mais avançados existentes, focando em um dos protocolos de criptografia mais utilizados atualmente, o RSA.
O RSA é um algorítimo de criptografia baseado no conceito de chaves assimétricas e funções matemáticas de mão única. É extremamente seguro, sendo um dos mais utilizados em protocolos de serviços dos nossos dias. Os maiores exemplos são o SSH e o SSL, dos quais, literalmente, dependem o mundo. Uma brecha de segurança relativamente grande em qualquer um dos dois poderia parar a internet. O SSL é utilizado em comunicações criptografadas na rede e o SSH é o principal e mais seguro serviço de administração e comunicação entre servidores, largamente utilizado por empresas e governos, como o dos Estados Unidos. Estes chegam até a designar comissões específicas para trabalhar na auditoria do código desses protocolos, assegurando, praticamente, a invulnerabilidade dos mesmos.
Como parte do artigo sobre RSA, foi lançado em um tópico na comunidade Segurança da Informação um desafio relativo à quebra do protocolo, descoberta da chave privada e, em alguns casos, de descriptografia de mensagens de alguns caracteres. Desafio este do qual eu, felizmente, fui o vencedor, depois de várias horas de apreensão e algumas toneladas de processamento contínuo, além de diversas versões de códigos desenvolvido em Python, a melhor linguagem de programação, em minha humilde opinião.
O desafio proposto pode ser lido na íntegra, bem como sua evolução, em Ganhe um livro aqui no VOL. Antes deste, um outro desafio menor, valendo pontos no Viva o Linux, foi postado em Desafio RSA número 1 e até mesmo um "aquecimento", com algumas dicas foi previamente idealizado em Aquecimento: desafio RSA. Em cada um destes tópicos tem exemplos, dicas e links para informações úteis a quem se aventurasse a participar.
Então, vamos ao desafio!
O RSA é um algorítimo de criptografia baseado no conceito de chaves assimétricas e funções matemáticas de mão única. É extremamente seguro, sendo um dos mais utilizados em protocolos de serviços dos nossos dias. Os maiores exemplos são o SSH e o SSL, dos quais, literalmente, dependem o mundo. Uma brecha de segurança relativamente grande em qualquer um dos dois poderia parar a internet. O SSL é utilizado em comunicações criptografadas na rede e o SSH é o principal e mais seguro serviço de administração e comunicação entre servidores, largamente utilizado por empresas e governos, como o dos Estados Unidos. Estes chegam até a designar comissões específicas para trabalhar na auditoria do código desses protocolos, assegurando, praticamente, a invulnerabilidade dos mesmos.
Como parte do artigo sobre RSA, foi lançado em um tópico na comunidade Segurança da Informação um desafio relativo à quebra do protocolo, descoberta da chave privada e, em alguns casos, de descriptografia de mensagens de alguns caracteres. Desafio este do qual eu, felizmente, fui o vencedor, depois de várias horas de apreensão e algumas toneladas de processamento contínuo, além de diversas versões de códigos desenvolvido em Python, a melhor linguagem de programação, em minha humilde opinião.
O desafio proposto pode ser lido na íntegra, bem como sua evolução, em Ganhe um livro aqui no VOL. Antes deste, um outro desafio menor, valendo pontos no Viva o Linux, foi postado em Desafio RSA número 1 e até mesmo um "aquecimento", com algumas dicas foi previamente idealizado em Aquecimento: desafio RSA. Em cada um destes tópicos tem exemplos, dicas e links para informações úteis a quem se aventurasse a participar.
Então, vamos ao desafio!