Criptografia – A criptografia na moeda
Este artigo explora a tecnologia fundamental subjacente às criptomoedas e à criptografia, desde os conceitos básicos de encriptação até às cifras.
Neste artigo aprofundado, falamos de uma tecnologia fundamental por detrás das criptomoedas – a criptografia – abordando as noções básicas de encriptação, funções hash e cifras como introdução à criptografia em ação.
Introdução à criptografia
A criptografia, em termos mais simples, consiste em tornar as comunicações secretas. O termo “secreto” significa que, mesmo na presença de um espião que pode monitorizar todas as comunicações, a mensagem pretendida pode ser entregue ao destinatário e mantida em segredo.
A criptografia utiliza frequentemente técnicas matemáticas para obter propriedades desejáveis em termos de sigilo. Está frequentemente associado ao processo de conversão de texto simples em texto cifrado, que é um texto que apenas o recetor pretendido pode descodificar. O processo que converte texto simples em texto cifrado é conhecido como encriptação, enquanto o processo de conversão de texto cifrado em texto simples é designado por desencriptação. Uma cifra (ou cifra) é um algoritmo para efetuar a encriptação ou a desencriptação – uma série de passos bem definidos que podem ser seguidos como um procedimento.
A criptografia não é algo de novo, nem apenas para as criptomoedas. É amplamente utilizado na vida quotidiana quando é necessário proteger informações, como palavras-passe de transacções bancárias, palavras-passe de contas de correio eletrónico e transacções de comércio eletrónico.
A cadeia de blocos e as criptomoedas utilizam a criptografia de várias formas – para carteiras, transacções, segurança e protocolos de preservação da privacidade. Por exemplo:
- Criptografia de chave pública utilizada numa transação
- Hashing para mineração de Bitcoin
- Árvores de Merkle para posicionamento de transacções em blocos
Quase podemos dizer que quem não entende de criptografia não entende de criptomoedas. Para aprender melhor, vamos mergulhar no mundo da criptografia.
Encriptação simétrica e assimétrica e funções de hash
A classificação dos algoritmos criptográficos baseia-se no número de chaves utilizadas para a cifragem e a decifragem: cifragem simétrica, cifragem assimétrica e funções de hash.
Cada um tem aplicações específicas que são insubstituíveis entre si. Por exemplo, a encriptação assimétrica é necessária para gerar os pares de chaves privadas/públicas, enquanto as funções de hash são necessárias para produzir impressões digitais únicas.
Encriptação simétrica
A encriptação simétrica utiliza uma única chave tanto para a encriptação como para a desencriptação. O emissor da mensagem utiliza a chave para encriptar o texto simples e envia o texto cifrado ao recetor, que aplica a mesma chave para desencriptar a mensagem e recuperar o texto simples. Os sistemas de chave simétrica são mais rápidos e mais simples (quando comparados com os sistemas de chave assimétrica), mas não resolvem o problema da troca de chaves entre o emissor e o recetor se a chave não for conhecida antecipadamente.
Os esquemas de criptografia simétrica dividem-se ainda em cifras de bloco e cifras de fluxo.
Cifras de bloco
As cifras de bloco dividem a entrada em blocos de tamanho fixo (por exemplo, 128 bits), e cada um dos blocos é processado por várias funções com a chave secreta. O algoritmo determina o comprimento do bloco, a chave e as funções utilizadas no processo.
Algumas das cifras de bloco mais utilizadas incluem:
Norma de encriptação de dados (DES)
- Comprimento do bloco = 64 bits
- Comprimento da chave = 56 bits
Criado na IBM, o DES foi uma das cifras simétricas de bloco mais populares no início da década de 1970 e é um dos algoritmos de encriptação mais exaustivamente examinados. Foi adotado como norma federal pelo National Bureau of Standards (EUA) em 1976 e incluído nas normas ANSI como algoritmo de encriptação de dados para o sector privado em 1981.
No início do século XXI, o DES era considerado inseguro, principalmente devido ao comprimento relativamente curto da sua chave secreta, o que o tornava vulnerável a ataques de força bruta.
Norma de encriptação avançada (AES)
- Comprimento do bloco = 128 bits
- Comprimento da chave = 128, 192 ou 256 bits
AES, uma cifra simétrica de bloco moderna, é uma das cifras mais populares do mundo. Desenvolvida em 1997 por Vincent Rijmen e Joan Daemen, foi posteriormente aprovada como norma federal de encriptação nos Estados Unidos em 2002.
O AES é considerado uma cifra sólida e segura. Ao longo dos anos, registaram-se vários ataques contra diferentes implementações do AES, mas estes dizem respeito a casos especiais e não são considerados uma ameaça ao próprio algoritmo AES.
DES triplo (3DES)
- Comprimento do bloco = 64 bits
- Comprimento da chave = 56, 112 ou 168 bits
A cifra 3DES foi desenvolvida porque a encriptação DES, inventada no início dos anos 70 e protegida por uma chave de 56 bits, se revelou demasiado fraca e fácil de quebrar utilizando os computadores modernos da altura.
Cifras de fluxo
As cifras de fluxo são mais flexíveis do que as cifras de bloco, uma vez que são concebidas para encriptar caracteres individuais (normalmente dígitos binários) de uma mensagem de texto simples, um de cada vez, utilizando uma transformação de encriptação que varia com o tempo. Em contrapartida, as cifras de bloco tendem a encriptar blocos de texto simples utilizando simultaneamente uma transformação de encriptação fixa.
Em geral, o hardware das cifras de fluxo é mais rápido do que o das cifras de bloco. As cifras de fluxo contínuo são também mais adequadas e, nalguns casos, obrigatórias (por exemplo, nalgumas aplicações de telecomunicações) quando a memória intermédia é limitada ou quando os caracteres têm de ser processados individualmente à medida que são recebidos. Como têm uma propagação de erros limitada ou nula, as cifras de fluxo podem também ser vantajosas em situações em que os erros de transmissão são altamente prováveis.
Algumas cifras de fluxo populares incluem:
RC4
- Comprimento da chave = até 2.048 bits
O RC4 é uma cifra de fluxo de tamanho de chave variável com operações orientadas para bytes que é amplamente utilizada em protocolos populares. Por exemplo, é utilizada para proteger o tráfego da Internet (Transport Layer Security, conhecida como TLS) ou para proteger redes sem fios (Wired Equivalent Privacy, ou WEP).
Teclado de uso único (OTP)
- Comprimento da chave = comprimento da mensagem
A teoria subjacente ao One-Time Pad (OTP) é que a chave deve ter, pelo menos, o mesmo comprimento que a mensagem (o texto simples) e consistir em números verdadeiramente aleatórios. Cada letra do texto simples é “misturada” com um elemento da OTP. Isto resulta num texto cifrado que não tem qualquer relação com o texto simples quando a chave é desconhecida. Na extremidade recetora, a mesma OTP é utilizada para recuperar o texto simples original.
Salsa20
- Comprimento da chave = 32 bytes
A Salsa20 é uma cifra submetida ao projeto eSTREAM, que decorreu entre 2004 e 2008, com o objetivo de promover o desenvolvimento de cifras de fluxo. É considerado um algoritmo bem concebido e eficiente. Não existem ataques conhecidos e eficazes à família de cifras Salsa20.
Encriptação assimétrica
A encriptação assimétrica é também conhecida como criptografia de chave pública (PKC). Utiliza duas chaves diferentes para encriptação e desencriptação. A chave que precisa de ser mantida em segredo é designada por chave privada, enquanto a chave que não precisa de ser mantida em segredo é designada por chave pública. Por exemplo, se A quiser enviar uma mensagem a B e garantir que B será a única pessoa capaz de a compreender, A pode encriptar a mensagem utilizando a chave pública de modo a que apenas B possa desencriptar a mensagem utilizando a chave privada.
Descrita publicamente pela primeira vez pelo professor da Universidade de Stanford Martin Hellman e pelo estudante Whitfield Diffie em 1976, a encriptação assimétrica é descrita como um sistema de encriptação de duas chaves em que duas partes podem comunicar de forma segura através de um canal de comunicações não seguro sem terem de partilhar uma chave secreta comum.
Embora a chave pública e a chave privada sejam diferentes, estão matematicamente relacionadas. Mas a relação matemática só pode ser utilizada na encriptação e na desencriptação, e os outros não podem deduzir a chave privada mesmo que conheçam a chave pública.
Os algoritmos de criptografia assimétrica são amplamente utilizados nas criptomoedas. Por exemplo, o endereço da carteira é criado a partir de uma chave pública e só quem tiver a chave privada pode utilizar o dinheiro nela contido.
Alguns esquemas de encriptação assimétrica populares incluem:
RSA
A chave pública e a chave privada não são escolhidas arbitrariamente. Têm de ser gerados através de procedimentos específicos. A chave pública é constituída por dois números inteiros grandes (e, n) e a chave privada é constituída por dois números inteiros grandes (d, n). Os três números e, d e n estão relacionados de uma forma especial, exigindo um pouco mais de matemática:
Vamos supor que está a utilizar um codificador que transforma todo o texto simples em inglês em números árabes. Por exemplo, “Hey! Hey! Hey!” é traduzido para “7! 7! 7!” e “bitconnnnnnnnnnnnect” é traduzido para “83333331”. Agora, a Alice quer enviar a mensagem “Hello” (que é traduzida para “2”) ao Bob.
O método mais fácil para a Alice enviar a mensagem ao Bob é dizer diretamente ao Bob ‘2’. Mas Alice e Bob não querem que a sua mensagem seja vista por mais ninguém. Felizmente, o Bob conhece o RSA. Criou um par de chaves pública/privada e pediu a Alice que codificasse a mensagem “2” utilizando a chave pública que lhe forneceu.
Alice encripta então a mensagem “2” usando a chave pública de Bob (5, 14), e a mensagem encriptada torna-se “4”, que significa “Translate Server Error”. Mesmo que um bisbilhoteiro visse a sua mensagem, não faria ideia da razão pela qual está a enviar “4”.
O Bob sabe que o “4” não é a verdadeira mensagem da Alice. De seguida, desencripta a mensagem com a sua chave privada, que não disse a ninguém (nem mesmo à Alice). A chave privada é (11, 14) e, aplicando alguns procedimentos de desencriptação, o Bob descobre que a verdadeira mensagem é “2”.
Vamos ilustrar numa tabela como funciona o processo acima:
Do lado do Bob, ele só recebe a mensagem encriptada “4”. Mas ao aplicar a desencriptação com a sua chave privada, recuperou com sucesso a verdadeira mensagem “2”.
Então, como é que obtemos a chave pública (5, 14) e a chave privada (11, 14)?
Este processo é designado por geração de chaves RSA.
Para quem estiver interessado, consulte a encriptação RSA.
Criptografia de curva elíptica (ECC)
O ECC é um algoritmo de encriptação assimétrica alternativo ao RSA. Do mesmo modo, permite aos utilizadores criar um par de chaves públicas/privadas, mas os algoritmos/procedimentos utilizados são diferentes dos do RSA.
Por exemplo, para a curva elíptica (ver abaixo), a fórmula é y2 = x3 + ax + b, em que a e b são os coeficientes que determinam a forma da curva.
Começamos com um ponto específico na curva. De seguida, utilizamos uma função (chamada função ponto) para encontrar um novo ponto. Repetimos a função de ponto para percorrer a curva até chegar ao nosso último ponto. Vamos analisar o algoritmo:
Esta é uma óptima função de alçapão porque, se soubermos a localização do ponto de partida (A) e o número de saltos necessários para chegar ao ponto de chegada (E), é muito fácil encontrar o ponto de chegada. Por outro lado, se apenas as localizações do ponto de partida e do ponto de chegada forem conhecidas, é quase impossível descobrir quantos saltos foram necessários para lá chegar. Assim, neste exemplo, podemos definir a chave pública e a chave privada como:
- Chave pública: Ponto inicial A, ponto final E
- Chave privada: Número de saltos de A para E
Para ser mais geral, para uma dada curva elíptica (como mostrado abaixo), a chave pública é (P, G), onde P é o ponto inicial e G é o ponto final (um ponto especial pré-definido [constant] ponto CE), e a chave privada é k (k é um número inteiro e P = k * G).
Algoritmo de troca de chaves Diffie-Hellman
O algoritmo Diffie-Hellman é utilizado para estabelecer um segredo partilhado que pode ser utilizado para comunicações privadas durante a troca de chaves criptográficas através de uma rede pública.
Tradicionalmente, a comunicação encriptada entre duas partes exigia a troca de chaves através de um canal físico seguro, como listas de chaves em papel transportadas por um mensageiro de confiança. O método de troca de chaves Diffie-Hellman permite que duas partes, sem conhecimento prévio uma da outra, estabeleçam conjuntamente uma chave secreta partilhada através de um canal inseguro. Esta chave pode então ser utilizada para encriptar comunicações subsequentes utilizando uma cifra de chave simétrica (tal como referido anteriormente).
Para simplificar o algoritmo, utilizamos a imagem seguinte para apresentar o procedimento desta encriptação. Note-se que a letra P no início é selecionada aleatoriamente numa curva elíptica, e G é uma raiz primitiva de P. As chaves privadas de a e b são escolhidas aleatoriamente.
Alice e Bob podem agora utilizar a mesma chave secreta (3) para encriptar a mensagem entre eles sem conhecerem essa chave antecipadamente.
Funções de hash
As funções de hash, também designadas por message digests e encriptação unidirecional, comprimem o texto simples num texto de comprimento fixo, designado por valor de hash (ou digest). É impossível recuperar o valor hash de volta para o texto simples.
Uma função de hash deve cumprir três propriedades de segurança:
1) Resistente à colisão
É computacionalmente inviável encontrar duas cadeias de entrada diferentes que, se aplicadas à função hash, tenham o mesmo resultado.
Pode ser expresso da seguinte forma:
É difícil encontrar x e y, em que H(x) = H(y), mas x não é igual a y.
Tenha em atenção que tem de haver colisões, uma vez que estamos a passar de um espaço de entrada muito maior t (quaisquer cadeias de caracteres) para um espaço de saída fixo (2^256).
Aplicação: Hash como um Message Digest. Se soubermos que H(x) = H(y), é seguro assumir que x = y.
Exemplo: Para reconhecer um ficheiro que vimos anteriormente, lembre-se do seu hash. Isto funciona porque o hash é pequeno.
2) Oculto
Dado H(x), é inviável encontrar x. Isto pode ser explicado da seguinte forma: se nos for dada a versão com hash de x, não encontraremos x.
Aplicação da propriedade oculta: Compromisso
Esta é a analogia digital de pegar num valor (um número), fechá-lo num envelope e colocar esse envelope em cima da mesa – onde qualquer pessoa o pode ver – comprometendo-se assim com o que está no envelope e com o seu segredo em relação a todos os outros. Mais tarde, o envelope pode ser aberto e o valor retirado, mas está selado. Por isso, comprometa-se com um valor e revele-o mais tarde.
O algoritmo de compromisso faz duas coisas:
1. Comprometer-se com uma mensagem: Devolve dois valores – um compromisso e uma chave. O compromisso é o mesmo que o envelope posto em cima da mesa; a chave é necessária para o abrir.
2. Mais tarde, revelamos a alguém a mensagem original e deixamo-lo verificar que corresponde ao original, fornecendo-lhe o compromisso e a chave.
3) Amigo dos puzzles
Se alguém quiser visar uma determinada função de hash, então ganha algum valor de y. Se uma parte da entrada for escolhida aleatoriamente, é difícil encontrar outro valor para o valor da função hash.
Dada uma saída y da função hash, se k for escolhido de uma distribuição aleatória, é inviável encontrar um x, tal que o hash de k|x(k concatenado com x) seja y: H(k|x) = y.
Funções de hash populares
Digestão de mensagens (MD)
A família MD inclui as funções de hash MD2, MD4, MD5 e MD6. Foi adoptada como norma da Internet RFC 1321 e é uma função de hash de 128 bits.
Os resumos MD5 têm sido amplamente utilizados no mundo do software para garantir a integridade dos ficheiros transferidos. Por exemplo, os servidores de ficheiros fornecem frequentemente uma soma de verificação MD5 pré-computada para os ficheiros, para que um utilizador possa comparar a soma de verificação do ficheiro descarregado com essa soma.
Função de hash segura (SHA)
A família de SHA é composta por quatro algoritmos SHA: SHA-0, SHA-1, SHA-2 e SHA-3. Apesar de pertencerem à mesma família, são estruturalmente diferentes.
O SHA-0 foi publicado pelo National Institute of Standards and Technology (NIST) dos EUA em 1993. Tinha poucos pontos fracos, mas não se tornou muito popular.
Mais tarde, em 1995, o SHA-1 foi concebido para corrigir as alegadas fragilidades do SHA-0. Colisões contra o algoritmo SHA-1 completo podem ser produzidas usando o ataque shattered, e a função hash deve ser considerada quebrada.
A família SHA-2 tem mais quatro variantes SHA: SHA-224, SHA-256, SHA-384 e SHA-512, dependendo do número de bits no seu valor de hash. SHA-256 e SHA-512 são normalmente utilizados. O SHA-512 é mais seguro do que o SHA-256 e é frequentemente mais rápido do que o SHA-256 em máquinas de 64 bits.
Em outubro de 2012, o NIST escolheu o algoritmo Keccak como a nova norma SHA-3. O Keccak oferece muitas vantagens, como um desempenho eficiente e uma boa resistência a ataques.
RIPEMD
A RIPEMD é uma família de funções hash criptográficas que inclui a RIPEMD, a RIPEMD-128 e a RIPEMD-160. Existem também versões de 256 e 320 bits deste algoritmo. O RIPEMD-160 é uma versão melhorada e a versão mais utilizada da família.
Palavras finais: Aplicar a criptografia na prática
A criptografia tem uma história surpreendentemente longa, mas com possibilidades aparentemente infinitas de utilização futura. Este processo é a base das actuais criptomoedas e carteiras.
Para mais informações sobre os diferentes tipos de carteiras de criptomoedas, leia O que é uma carteira de criptografia? Um guia para principiantes.
Diligência devida e fazer a sua própria investigação
Todos os exemplos apresentados neste artigo têm um carácter meramente informativo. O utilizador não deve interpretar essas informações ou outros materiais como aconselhamento jurídico, fiscal, de investimento, financeiro, de segurança cibernética ou outro. Nada aqui contido constituirá uma solicitação, recomendação, endosso ou oferta da Crypto.com para investir, comprar ou vender quaisquer moedas, tokens ou outros activos criptográficos. Os rendimentos da compra e venda de activos criptográficos podem estar sujeitos a impostos, incluindo o imposto sobre mais-valias, na sua jurisdição. Quaisquer descrições dos produtos ou características da Crypto.com são meramente para fins ilustrativos e não constituem um endosso, convite ou solicitação.
O desempenho passado não é uma garantia ou um indicador do desempenho futuro. O valor dos activos criptográficos pode aumentar ou diminuir, e pode perder a totalidade ou um montante substancial do seu preço de compra. Ao avaliar um ativo criptográfico, é essencial que faça a sua investigação e a devida diligência para fazer o melhor julgamento possível, uma vez que quaisquer compras serão da sua exclusiva responsabilidade.
Compartilhar com amigos
Pronto para começar sua jornada cripto?
Receba o guia passo a passo para abrir
uma conta na Crypto.com
Ao clicar no botão Enviar, você reconhece que leu o Aviso de Privacidade da Crypto.com onde explicamos como usamos e protegemos seus dados pessoais.