Distribuição quântica de chaves
Para este módulo do Qiskit in Classrooms, os estudantes precisam ter um ambiente Python funcional com os seguintes pacotes instalados:
qiskitv2.1.0 ou mais recenteqiskit-ibm-runtimev0.40.1 ou mais recenteqiskit-aerv0.17.0 ou mais recenteqiskit.visualizationnumpypylatexenc
Para configurar e instalar os pacotes acima, consulte o guia Instalar o Qiskit. Para executar tarefas em computadores quânticos reais, os estudantes precisarão criar uma conta no IBM Quantum® seguindo os passos do guia Configurar sua conta IBM Cloud.
Este módulo foi testado e utilizou 5 segundos de tempo de QPU. Isso é apenas uma estimativa. O uso real pode variar.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
Assista ao guia do módulo pela Dra. Katie McCormick abaixo, ou clique aqui para assistir no YouTube.
Introdução e motivação
Há infinitas formas de criptografar e descriptografar informações, e literalmente milhares delas já foram estudadas em profundidade. Aqui, vamos nos restringir a um método de criptografia muito antigo e muito simples, chamado de "substituição simples", para poder focar na parte quântica deste protocolo. A parte quântica pode ser adaptada a muitos outros protocolos com relativamente poucas mudanças.
Substituição simples
Uma criptografia por substituição simples é aquela em que uma letra ou número é substituído por outro, de forma que haja um mapeamento 1:1 entre as letras e os números de uma mensagem e as letras e números usados na sequência criptografada. Um exemplo popular desse tipo é o puzzle de criptograma, em que uma citação ou frase é criptografada por substituição simples, e o jogador tem a tarefa de descriptografá-la. Esses puzzles são fáceis de resolver se forem longos o suficiente. Considere o exemplo:
R WVXRWVW GSZG R'W YVGGVI NZPV GSRH KIVGGB OLMT. GSZG DZB, KVLKOV DROO SZEV ZM VZHRVI GRNV HLOERMT RG. R SLKV R NZWV RG HRNKOV VMLFTS.
As pessoas que resolvem esses puzzles à mão geralmente usam truques que envolvem familiaridade com a estrutura da língua da mensagem original. Por exemplo, em inglês, as únicas palavras de uma letra como o "R" criptografado são "a" e "I". As letras duplas criptografadas em, por exemplo, "KIVGGB", só podem assumir certos valores. Há coisas mais sutis que dão pistas, como o fato de que a palavra mais comum com o padrão de "GSZG" é "that". Quem usa código para resolver esses puzzles tem muito mais opções, incluindo simplesmente varrer as possibilidades até que uma palavra em inglês seja encontrada e atualizar preservando essa palavra. Um método simples, mas poderoso, é usar a frequência de letras, especialmente quando a mensagem é longa o suficiente para constituir uma amostra representativa do inglês.
Questão de verificação
Tente descriptografar o texto acima, se quiser, embora isso não seja necessário para o restante do módulo. Clique na seta abaixo para ver a mensagem.
Resposta:
I decided that I'd better make this pretty long. That way, people will have an easier time solving it. I hope I made it simple enough.
O exemplo acima está associado a uma "chave", um mapeamento das letras criptografadas para as letras descriptografadas. Neste caso, a chave é:
- A (não utilizado, vamos chamar de Z)
- B->Y
- C (não utilizado, vamos chamar de X)
- D->W
- E->V
- F->U
- ...
E assim por diante. Para dizer o mínimo, essa não é uma boa chave. Chaves em que as letras criptografadas e descriptografadas são simplesmente versões deslocadas do alfabeto (como A->B e B->C) são chamadas de cifras de "deslocamento de César".
Note que esses puzzles são muito difíceis se forem curtos. Na verdade, se forem muito curtos, são indetermináveis. Considere:
URYYP
Há muitas descriptografias possíveis, usando chaves diferentes: HELLO, PETTY, HAPPY, JIGGY, STOOL. Você consegue pensar em outras?
Mas se você enviar muitas mensagens assim, eventualmente a criptografia será quebrada. Portanto, você não deveria usar a mesma "chave" com muita frequência. Na verdade, o ideal é usar uma certa substituição apenas uma vez. Não em apenas uma mensagem, mas somente para um único caractere! Com isso, queremos dizer que você terá um esquema de criptografia ou chave para cada caractere usado na mensagem, em ordem. Se você quiser enviar uma mensagem a um amigo usando esse método, você e seu amigo precisariam de um bloco de papel (nos velhos tempos) no qual essa chave em constante mudança estivesse escrita. Você vai usá-lo apenas uma vez. Isso é chamado de "bloco de uso único" (one-time pad).
O bloco de uso único
Vamos ver como isso funciona com um exemplo. Poderíamos fazer isso inteiramente com letras, mas é comum converter de letras para números, digamos, atribuindo A=0, B=1, C=2…. Suponha que somos amigos envolvidos em atividades clandestinas e compartilhamos um bloco. O ideal seria compartilhar muitos blocos, mas o de hoje é:
EDGRPOJNCUWQZVMK…
Ou, convertendo para números pela posição no alfabeto:
4,3,6,17,15, 14, 9, 13, 2, 20, 22, 16, 25, 21, 12, 10…
Suponha que eu queira compartilhar com você a mensagem:
"I love quantum!"
Ou, equivalentemente:
8, 11, 14, 21, 4, 16, 20, 0, 13, 19, 20, 12
Não queremos enviar o código acima; isso seria uma substituição simples, que não é nada segura. Queremos combinar isso com nossa chave de alguma forma. Uma maneira comum é a adição módulo 26. Somamos o valor da mensagem ao valor da chave, mod 26, até chegar ao final da mensagem. Então, enviaríamos:
8+4 (mod 26) = 12, 11+3 (mod 26) = 14, 14+6 (mod 26) = 20, 21+17 (mod 26) = 12…
= 12, 14, 20, 12, 19, 4, 3, 13, 15, 13, 16, 2
Note que se alguém interceptar isso e NÃO tiver a chave, descriptografá-la é completamente impossível! Nem mesmo os dois "u"s em "quantum" são codificados com o mesmo número! O primeiro é um 3, e o segundo é um 16… na mesma palavra!
Então, eu envio isso para você, e você tem a mesma chave que eu. Você desfaz a adição módulo 26 que você sabe que eu realizei:
12, 14, 20, 12, 19, 4, 3, 13, 15, 13, 16, 2
=(4+x1) (mod 26), (3+x2) (mod 26), (6+x3) (mod 26), (17+x4) (mod 26),…
De forma que a mensagem x1, x2, x3, x4… deve ser
8, 11, 14, 21…
Por fim, convertendo isso para texto, temos
"I love quantum".
Isso é um bloco de uso único.
Note que se a chave for mais curta que a mensagem, começamos a repetir nossa codificação. Isso ainda seria um problema de descriptografia difícil de resolver, mas não impossível se for repetido com frequência suficiente. Portanto, você precisa de uma chave (ou "bloco") longa.
Em muitos contextos, os estudantes já estarão familiarizados com essa criptografia, de forma que essa atividade pode ser pulada. Mas é uma recapitulação relativamente rápida e simples.
Passo 1: Encontre um parceiro e compartilhem uma sequência de 4 letras para usar como chave. Qualquer sequência de 4 letras apropriada para o ambiente de aula serve.
Passo 2: Escolha uma palavra secreta de 4 letras que você quer enviar ao seu parceiro (ambos os parceiros fazem isso, para que vocês se enviem palavras secretas diferentes).
Passo 3: Converta a chave/bloco de 4 letras e cada uma das palavras secretas de 4 letras para números usando A = 1, B = 2, e assim por diante.
Passo 4: Combine sua palavra de 4 letras com o bloco de uso único usando adição módulo 26.
Passo 5: Entregue ao seu parceiro a sequência de números que codifica sua palavra secreta, e seu parceiro entregará a dele a você.
Passo 6: Decodifique as palavras um do outro usando subtração módulo 26.
Passo 7: Verifique. Funcionou?
Questão de acompanhamento
Troque palavras criptografadas com um grupo diferente que não tenha acesso ao seu bloco de uso único. Você consegue descriptografá-las? Explique por quê ou por quê não.
Esperamos que a atividade acima deixe claro que um bloco de uso único é uma forma inquebrável de criptografia, dadas algumas suposições, como:
- A chave tem o mesmo comprimento da mensagem a ser enviada, ou é mais longa
- A chave é verdadeiramente aleatória
- A chave é usada apenas uma vez e então descartada
Ótimo. Temos criptografia inquebrável... a menos que alguém obtenha nossa chave. Se alguém obtiver nossa chave, tudo é descriptografado. Essa diferença entre criptografia inquebrável e ter todos os nossos segredos expostos torna o compartilhamento de uma chave segura extremamente importante. O objetivo da distribuição quântica de chaves é aproveitar as restrições que a natureza impôs à informação quântica para proteger uma chave/bloco de uso único compartilhado.
Usando estados quânticos como chave
Vamos supor que estamos trabalhando com qubits (enfatizando que os qubits têm dois autoestados). Poderíamos usar sistemas quânticos com um número maior de estados quânticos, mas os computadores quânticos de ponta da IBM® usam qubits. Não há problema em codificar nossos A, B, C em sequências de 0s e 1s. Portanto, é suficiente para nós compartilharmos uma chave de 0s e 1s e fazer adição módulo 2 em cada bit que armazena uma letra.
Verifique sua compreensão
Leia a pergunta abaixo, pense na sua resposta e clique no triângulo para revelar a solução.
Se nos preocuparmos apenas com letras do inglês, quantos bits precisamos?
Resposta:
Nossos amigos Alice e Bob gostariam de compartilhar uma chave quântica de tal forma que ninguém mais possa interceptá-la (pelo menos não sem que eles saibam). Eles precisam ter uma maneira de enviar estados quânticos um ao outro. Fazer isso com alta fidelidade e sem ruído/erros NÃO é trivial. Mas há duas abordagens que devemos ser capazes de entender neste ponto:
- Um cabo de fibra óptica permite enviar luz… que é muito quântico-mecânica. Fótons individuais podem ser detectados com alta fidelidade por muitos quilômetros de cabo de fibra óptica. Esse não é um canal quântico perfeito e sem erros, mas pode ser muito bom.
- Poderíamos usar o teletransporte quântico, conforme descrito em um módulo anterior. Ou seja, Alice e Bob poderiam compartilhar qubits entrelaçados, e um estado poderia ser enviado de Alice para Bob usando o protocolo de teletransporte.
Para este módulo, não queremos exigir que você tenha configurações ópticas de alta fidelidade para compartilhar fótons, portanto usaremos o segundo método para compartilhar estados quânticos. Mas isso não significa que esse seja o mais realista para o compartilhamento de chaves quânticas a longas distâncias.
Vamos explorar agora um protocolo proposto inicialmente por Charles Bennett e Gilles Brassard em 1984 para compartilhar estados medidos em bases diferentes de Alice para Bob. Usaremos um regime de medição inteligente para construir uma chave para uso em criptografia posterior. Em outras palavras, estamos distribuindo uma chave quântica entre duas partes que desejam se comunicar, daí o nome "distribuição quântica de chaves" (QKD).
QKD passo 1: bits aleatórios e bases aleatórias de Alice
Alice começará gerando uma sequência aleatória de 0s e 1s. Em seguida, ela selecionará aleatoriamente uma base na qual preparar um estado quântico, com base em cada bit aleatório, usando a tabela abaixo (uma tabela que Bob também tem):
| Base | bit = 0 | bit = 1 |
|---|---|---|
| Z | ||
| X |
Por exemplo, suponha que Alice gerou aleatoriamente um 0 e selecionou aleatoriamente a base X. Então ela prepararia um estado quântico . Certamente é possível aproveitar a aleatoriedade quântica para gerar um conjunto aleatório de 0s e 1s e uma escolha aleatória de base. Por ora, vamos simplesmente supor que um conjunto aleatório foi gerado, como a seguir:
| Bits de Alice | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | ... |
|---|---|---|---|---|---|---|---|---|---|---|
| Bases de Alice | X | X | Z | Z | Z | X | Z | Z | X | ... |
| Estados de Alice | ... |
Esse conjunto de bits aleatórios, bases e estados resultantes continuaria em uma longa sequência, para fornecer uma chave de comprimento suficiente.
QKD passo 2: bases aleatórias de Bob
Bob também faz uma escolha aleatória de bases. No entanto, enquanto Alice usava a escolha de base para preparar seu estado, Bob fará medições nessas bases. Se Bob fizer uma medição na mesma base em que Alice preparou o estado, então podemos prever o resultado da medição de Bob. Quando Bob escolhe uma base diferente da base que Alice usou na preparação, não podemos saber o resultado da medição de Bob.
| Bits de Alice | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | ... |
|---|---|---|---|---|---|---|---|---|---|---|
| Bases de Alice | X | X | Z | Z | Z | X | Z | Z | X | ... |
| Estados de Alice | ... | |||||||||
| Bases de Bob | X | Z | X | Z | X | X | Z | X | X | ... |
| Estados de Bob (a priori) | ? | ? | ? | ? | ... | |||||
| Estados de Bob (medidos) | ... |
Na tabela abaixo, considere a primeira coluna. Alice preparou o estado que é um autoestado de X. Como Bob também escolheu aleatoriamente medir na base X, há apenas um resultado possível para o estado medido de Bob: Na segunda coluna, porém, eles escolheram bases diferentes. O estado que Alice enviou é Esse estado tem 50% de chance de ser medido por Bob no estado e 50% de chance de ser medido em Portanto, a linha mostrando o que sabemos, a priori, sobre as medições de Bob não pode ser preenchida para a coluna 2. Mas Bob fará uma medição e obterá um autoestado de (naquela coluna) Z. Na linha inferior, preenchemos o que essas medições aconteceram de produzir.
QKD passo 3: discussão pública das bases
Alice e Bob podem agora compartilhar entre si qual base escolheram em cada caso. Para todas as colunas em que coincidiram na mesma base, cada um sabe com certeza qual estado o outro tinha. Bob pode converter o estado e a base em um 0 ou 1 de acordo com a convenção compartilhada por ambas as partes. Podemos reescrever a tabela acima para mostrar apenas as instâncias em que as bases de Alice e Bob coincidiram:
| Bits de Alice | 0 | 0 | 1 | 0 | 0 | ... |
|---|---|---|---|---|---|---|
| Bases de Alice | X | Z | X | Z | X | ... |
| Estados de Alice | ... | |||||
| Bases de Bob | X | Z | X | Z | X | X |
| Estados de Bob (a priori) | ... | |||||
| Estados de Bob (medidos) |