À medida que as tecnologias criptográficas continuam a avançar e a encontrar utilizações novas e cada vez mais importantes nas nossas vidas, os processos que estas tecnologias realizam tornam-se cada vez mais complexos. Embora muito possa ser feito com primitivas criptográficas simples, é o que elas podem fazer quando combinadas que é o mais emocionante.
Ainda mais impressionante é a ideia de que alguns protocolos criptográficos são projetados com recursos de descrição de hardware, o que lhes confere o poder de enfrentar desafios universais. Essa ideia, apropriadamente chamada de “criptografia programável”, tem a promessa de tornar possíveis ações mais complicadas, parafraseando Brian Gu, transformando o problema matemático de projetar novos protocolos no problema de programação de combinar os existentes.
Neste artigo, exploraremos as camadas de aplicação criptográfica, desde objetivos de alto nível até algoritmos de baixo nível, para entender de onde vêm essas ideias. Então, veremos para onde eles estão indo.
Antes de começarmos, vamos refletir um pouco sobre a motivação fundamental que leva os criptógrafos a se aprofundarem em seu ofício. Afinal, é muito mais fácil ficar em casa e não fazer nada do que trabalhar em provas matemáticas de que um novo protocolo é seguro, viável e representa uma melhoria significativa em relação aos modelos existentes.
É devido à importância cada vez maior dos dados digitais que armazenamos, partilhamos e processamos que são necessários métodos novos e melhorados para garantir a privacidade e salvaguardar esses dados contra a adulteração. É o desejo de suprir essa necessidade que tira os criptógrafos da cama pela manhã.
É realmente surpreendente pensar na quantidade de informação que é processada online atualmente. Mais imediato para a maioria das pessoas é quanto mais tempo elas gastam interagindo com dados agora do que há alguns anos atrás. Todas essas informações que eles produzem, interagem, revisam e enviam correm o risco de serem espionadas, roubadas ou manipuladas se não forem devidamente protegidas.
É por isso que sempre há necessidade de criptografia. É por isso que continuam a ser desenvolvidos métodos novos e melhorados para manter a privacidade dos dados.
Como muitas outras disciplinas, a criptografia é baseada em conceitos simples que vão sendo ampliados à medida que a tarefa se torna mais interessante. Esses conceitos simples, muitas vezes chamados de “primitivos criptográficos” na criptografia moderna, são frequentemente básicos, mas podem ser combinados para construir algo complexo.
Por exemplo, considere um dos códigos mais antigos - a cifra de Cesar. Nomeado em homenagem ao seu usuário mais famoso, esse código envolve escrever palavras em um texto cifrado que desvia três letras da mensagem original. Neste caso, a palavra “o” seria escrita “qeb”. Cada letra foi deslocada para três pontos à frente no alfabeto inglês.
Embora este código seja bastante simples, ele é bem testado, útil e nada experimental. Se você precisar criptografar dados, isso irá criptografá-los. Embora não seja o código mais seguro do mundo, também pode ser combinado com outras técnicas para torná-lo mais forte.
Para dar outro exemplo, a cifra de Vigenère é uma ferramenta para codificar uma mensagem usando várias cifras de Cesar diferentes. Neste sistema, cada mensagem é combinada com uma chave; vamos imaginar “águia” e “limão”, respectivamente. A chave informa em quantos lugares as letras devem ser deslocadas na mensagem, mas cada letra tem um número diferente de deslocamentos. O “L” em limão diz para você deslocar a primeira letra da mensagem em doze espaços, já que L é a décima segunda letra do alfabeto inglês. O “E” diz para você mudar a segunda letra para cinco espaços e assim por diante.
Então, “maçã” se torna “peszr”. Sem acesso à chave, fica muito mais difícil decodificar a mensagem. Embora ainda tenha os pontos fracos da cifra de Cesar – com tempo suficiente, um cálculo de força bruta determinará qual é a mensagem – ao combinar as ferramentas existentes de uma nova maneira, o nível de segurança aumenta dramaticamente.
Como você provavelmente pode imaginar, muitas vezes é muito mais fácil combinar cifras existentes como essas de maneiras novas e mais complexas do que inventar um novo sistema. Cesar morreu há muito tempo e ainda usamos seu livro de códigos.
Assim como a sabedoria dos códigos mais antigos persiste, grande parte da tecnologia criptográfica moderna está num pedestal semelhante. Conseguir que um criptógrafo escreva novas provas de que um novo sistema manterá seus segredos digitais seguros é fantástico, mas também consome muito tempo e não há garantia de que funcione. Por outro lado, sabe-se que primitivos criptográficos como RSA (Rivest-Shamir-Adleman), AES (Advanced Encryption Standard) ou sistemas de assinatura digital funcionam e podem ser facilmente aplicados a uma ampla gama de problemas. Por exemplo, o RSA é amplamente utilizado para transmissão segura de dados, enquanto o AES é um padrão para criptografar dados confidenciais. Se combinados, podem fornecer funcionalidades inovadoras e resolver problemas mais complexos do que qualquer um deles poderia resolver sozinho.
Embora combinar métodos simples seja uma ótima maneira de criar sistemas mais complexos, há limitações para isso. Cada uma dessas primitivas é projetada para ser boa em uma tarefa específica, e não é incomum que erros sejam cometidos ao combiná-las, deixando suas fraquezas expostas.
Baseados em primitivos de baixo nível, os protocolos de nível médio visam recursos e funcionalidades mais avançados. A seguir, exploraremos alguns dos protocolos de nível médio mais amplamente adotados e discutidos.
A criptografia homomórfica é um protocolo que permite que dados criptografados sejam processados sem a necessidade de descriptografá-los primeiro. Exemplos disso existem hoje, embora ainda esteja em suas fases comparativamente iniciais - só foi demonstrado que era prático em 2009. Os modelos existentes às vezes são limitados em quais processos podem ser conduzidos nos dados criptografados.
No entanto, o conceito é extremamente interessante e tem muitas aplicações possíveis óbvias. Considere a frequência com que dados confidenciais, porém úteis, como registros médicos ou informações de crédito, são roubados de organizações que precisam acessá-los para ajudá-lo. E se fosse possível interagir com suas informações médicas criptografadas sem nunca decodificá-las? Os benefícios dessa melhoria na segurança são desnecessários.
A Computação Multipartidária (MPC) é uma ferramenta para ocultar informações fornecidas por diferentes atores que trabalham juntos em um resultado comum. Muitas vezes é descrito como o “problema do milionário”.
Imagine que existem dois milionários que querem saber qual deles tem mais dinheiro. No entanto, eles não querem simplesmente dizer qual é o seu patrimônio líquido. Eles podem usar o MPC para resolver esse problema. O primeiro milionário consegue adicionar seu patrimônio líquido criptografado a um programa projetado para comparar os valores antes de enviá-lo para o segundo. O segundo milionário não consegue ver o primeiro valor quando soma seu patrimônio líquido.
Eles podem então descriptografar a saída e descobrir qual deles inseriu um valor maior - tudo isso sem conseguir ver nenhuma das entradas.
Por último, vejamos as Provas de Conhecimento Zero (ZKPs). Provavelmente são bem conhecidos do leitor, pois são amplamente utilizados, e iremos considerá-los brevemente. Os ZKPs são muito bons em permitir que um provador diga a outra pessoa, muitas vezes chamada de verificador , que algo é verdade sem dizer mais nada. Normalmente, eles fornecem esse serviço a um único usuário; uma pessoa pede uma prova e ela consegue. Existem vários ZKPs, incluindo zk-SNARK e zk-STARK. Cada um tem suas próprias vantagens e desvantagens.
À medida que a pesquisa sobre esses protocolos avançados progrediu, o foco se expandiu para o desenvolvimento de protocolos criptográficos de uso geral. Estas iniciativas visam provar que é viável para a criptografia permitir que a computação universal seja feita de forma segura e privada. Inicialmente, estes esforços eram puramente teóricos, priorizando a viabilidade em detrimento da eficiência da implementação prática. No entanto, à medida que a investigação se aprofundou, os criptógrafos mudaram a sua atenção para tornar estes conceitos aplicáveis na prática. Eles aprimoram, combinam e inventam novos protocolos e componentes. Muitas vezes, o protocolo final acaba sendo um híbrido, aproveitando os pontos fortes de múltiplas abordagens. Por exemplo, a criptografia homomórfica utiliza provas de conhecimento zero para provas de intervalo para garantir que os cálculos permaneçam dentro de um intervalo válido. Enquanto isso, os protocolos MPC podem incorporar elementos de homomorfismo para executar operações não lineares.
Entre a infinidade de protocolos experimentais, alguns chegaram perto o suficiente da utilidade prática e abriram caminho para o desenvolvimento no mundo real. Essas ferramentas funcionam de forma semelhante aos compiladores, interpretando linguagens de alto nível e convertendo-as em circuitos que os protocolos criptográficos podem processar. Essa transformação é semelhante à conversão de software em operações de registro de CPU ou à tradução do Solidity em transições de estado EVM. Alcançar essa capacidade semelhante à de um compilador, completa com suporte para computação completa de Turing, marca o advento do que chamamos de criptografia programável. Embora isso possa parecer excessivamente otimista, a realidade é matizada. Funções hash bit a bit, por exemplo, não são tão eficientes em um protocolo à prova de conhecimento zero, enquanto hashes executados por meio de multiplicação modular oferecem eficiência superior. Portanto, é aconselhável evitar algoritmos como SHA-3. Além disso, evitar cálculos de ponto flutuante é uma prática comum, uma vez que os protocolos criptográficos operam predominantemente em campos finitos. Truques como esses existem em todos os lugares para dar vida à criptografia programável.
A criptografia programável ainda é um conceito novo, mas oferece a oportunidade de simplificar muito problemas muito complicados. É fácil especular sobre os rumos que tomará. É quase certo que serão feitas tentativas de programar com todos os tipos de ferramentas criptográficas, embora os níveis de sucesso que serão encontrados com elas devam ser determinados.
No entanto, alguns desses experimentos funcionarão. Alguns deles funcionarão bem, e aqueles que funcionarem bem fornecerão funcionalidades poderosas e altos níveis de segurança, sem a necessidade de um criptógrafo criar um sistema totalmente novo para um aplicativo. Essa possibilidade por si só provavelmente despertará um grande interesse na área.
O problema de como fazer isto de uma forma que funcione com os sistemas existentes terá de ser abordado, e é provável que grande parte do que é adoptado seja aquilo que funciona eficientemente com os dados com os quais é necessário interagir.
O impacto desta tecnologia na segurança dos dados, na privacidade e no campo mais amplo da segurança digital pode ser difícil de exagerar. Um grande número de acções complexas tornar-se-ão mais fáceis de implementar. Embora a má programação cause problemas, como sempre acontece, onde a tecnologia funciona, veremos melhor segurança e sistemas de privacidade mais robustos.
Talvez o mais encorajador de tudo seja que ainda é bastante cedo em termos de utilização desta tecnologia. As provas ZK foram concebidas na década de 1980, mas só se tornaram possíveis em 2012. Pode haver muitos mecanismos e combinações possíveis de mecanismos com os quais ninguém sonhou ainda. A próxima ideia que irá abalar o mundo poderá chegar amanhã. Podemos nem ser capazes de adivinhar o que isso fará.