Escolar Documentos
Profissional Documentos
Cultura Documentos
SUMÁRIO
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n
Se considerarmos o mundo criptográfico apenas, os números (ou valores) aleatórios são de vital
importância, porque uma parte significativa da segurança dos criptossistemas modernos reside na
imprevisibilidade de resultados dos algoritmos, e isso só é possível se os algoritmos conseguirem gerar
valores que não possuem uma previsibilidade computacionalmente praticável.
Imagine que um criptoanalista passe a analisar um algoritmo de criptografia e, por causa da
previsibilidade dos resultados, ele acabará descobrindo quais serão os textos cifrados, exatamente
porque não há um elemento aleatório para diferenciar quaisquer resultados.
É como se disséssemos com plena certeza que, depois do número 10, sempre vem o número 40, depois o
número 70 e assim por diante. A aleatoriedade a que nos referimos aqui é puramente matemática,
portanto, algoritmos matemáticos são uma parte essencial desses geradores quando tratamos de
pseudoaleatoriedade.
Embora seja possível demonstrar que o espaço amostral exista, o resultado do evento é parcialmente
desconhecido. O conceito dado aqui é meramente didático, pois há processos estocásticos1 dentro da
matemática para descrevê-los, mas não aprofundaremos essa definição. Observe que a aleatoriedade
está ligada diretamente à área da teoria da probabilidade.
Há basicamente dois grandes grupos quando tratamos dos tipos de aleatoriedade e números aleatórios
dentro da Matemática e na Computação (e, consequentemente, nos demais campos do conhecimento):
1. Números (ou valores) verdadeiramente aleatórios: são aqueles em que não há uma previsão
matematicamente precisa, pois são eventos naturais que ainda não são totalmente simulados
pela Matemática, ou pela Física por exemplo. São também, às vezes, chamados de eventos
caóticos. Exemplos: fatos que circundam a ocorrência de um raio (quando, onde, intensidade),
geração de uma onda eletromagnética por um corpo celeste, uma explosão de ventos solares
gerada pelo sol, fatos que circundam a ocorrência de um terremoto.
2. Números (ou valores) pseudoaleatórios: são aqueles gerados por dispositivos criados por
humanos e que pela característica de amostragens e espaço amostral, demonstram uma certa
previsibilidade. Boa parte deles vem de um processo puramente matemático criado pelo homem.
Se você, estudante, observar com mais cuidado os eventos que rodeiam a sua vida no dia a dia,
perceberá que boa parte deles se encaixará no segundo grupo. Um simples jogo de dados, por exemplo,
nos dá a ideia de completa aleatoriedade, mas, na prática, além de sabermos que o espaço amostral de
um dado é muito pequeno, as condições iniciais de como se lança o dado fazem toda a diferença no final.
Se você sempre jogar um dado de uma maneira X, pode ser que ele sempre revele o número 6. Ou seja, a
“entropia” inicial muda todo o resultado, porque há algo conhecido influenciando o resultado final. A
esse conceito amplo é o que denominamos de pseudoaleatoriedade. Perceba, então, que a parte de
jogos é uma outra área alheia à criptografia, que também utiliza muito o conceito de
pseudoaleatoriedade.
1
Determinado pelas leis da probabilidade; aleatório.
Copyright © 2016 Centro Universitário IESB. Todos os direitos reservados.
CRIPTOGRAFIA: ALGORITMOS E CERTIFICAÇÃO DIGITAL | UIA 3 | 6
Não adentraremos na seara de como isso é feito, pois o mais importante para a nossa disciplina é você
entender de forma mais sólida o conceito de pseudoaleatoriedade.
2
Geradores de números pseudoaleatórios criptograficamente seguros. São algoritmos destinados a prover a maior
aleatoriedade possível utilizando como entropia recursos computacionais.
Copyright © 2016 Centro Universitário IESB. Todos os direitos reservados.
CRIPTOGRAFIA: ALGORITMOS E CERTIFICAÇÃO DIGITAL | UIA 3 | 7
Generator (LCG3). Sua fórmula e implementação prática através de uma linguagem de programação é
relativamente simples. Contudo, ele não é computacionalmente seguro para operações criptográficas.
Por isso, o objetivo de demonstrar o funcionamento do LCG na disciplina é puramente didático para dar
a você, estudante, a noção exata de como os CSPRNG podem ser construídos.
O número anterior 1103515245 foi supostamente um número escolhido ao acaso. Observe a diferença na
previsibilidade dos resultados se a semente, ou valor inicial, for igual ao número 1:
3
Um dos mais simples geradores de números pseudoaleatórios, mas que não é apropriado para uso criptográfico de larga
escala.
Copyright © 2016 Centro Universitário IESB. Todos os direitos reservados.
CRIPTOGRAFIA: ALGORITMOS E CERTIFICAÇÃO DIGITAL | UIA 3 | 8
Com isso, o LCG, para ser usado criptograficamente, deveria ser alterado para, além de fornecer um
espaço amostral significativamente maior, também considerar “sementes” (ou valores iniciais) que não
gerem resultados tão previsíveis como estes últimos.
A seguir, segue a implementação do LCG em um simples interpretador Python. A sintaxe é a utilizada
diretamente no interpretador Python:
>>> c = 2**48
>>> for a in list(xrange(10,16)):
... a = (1103515245*a + 12345) % c
... print a
...
11035164795
12138680040
13242195285
14345710530
15449225775
16552741020
O LCG é um algoritmo muito simples e, como dito anteriormente, não deve ser aplicável a operações
criptográficas. Há outros algoritmos, como o Linear Feedback Shift Register (LFSR), que é largamente
utilizado em linguagens de programação como JavaScript, PHP e Java. Entretanto, o LFSR não provê uma
margem tão significativa a ponto de gerar números pseudoaleatórios “confiáveis”. O termo confiável é
utilizado do ponto de vista criptográfico por causa do nível de entropia.
Como dito na Aula 7, os dispositivos /dev/random e /dev/urandom são largamente utilizados em
sistemas UNIX, pois eles criam as “sementes” a partir de eventos quase que totalmente aleatórios, vindos
da atividade que o usuário faz no computador. Já a plataforma Microsoft utiliza a API
CryptGenRandom. Esses dispositivos estão intimamente conectados com o kernel do sistema
operacional, portanto, podem ser considerados “mais confiáveis”.
Termina aqui nossa primeira aula desta unidade. Introduzimos conceitos que serão importantes ao longo
desta parte do conteúdo. Continue os estudos desta disciplina e até breve!
Bem-vindos à Aula 14 da Unidade de Interação e Aprendizagem (UIA) 3. Nas UIAs anteriores, percebemos que
o mundo da criptografia é bem amplo, e abordamos alguns princípios básicos da criptografia, bem como a
abordagem de cifragem simétrica.
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n
Há indícios de que o serviço secreto britânico já havia inventado uma nova forma de se trocar chaves.
Apesar disso, a invenção do algoritmo Diffie-Hellman, em 1976, foi o marco histórico na criação dessa
nova abordagem, porque possibilitou a troca de chaves de forma “segura”. Note que o termo “seguro” já
foi amplamente discutido nas aulas anteriores, então, não iremos detalhá-lo novamente. O Diffie-
Hellman não provê a confidencialidade dos dados trocados e nem sequer pode ser considerado um
algoritmo de criptografia propriamente dito porque o objetivo dele é a troca de chaves criptográficas,
não de informações criptografadas.
Nesse sentido, a nova abordagem a ser discutida amplamente nesta aula é o detalhamento dos principais
pontos acerca da criptografia de chave assimétrica, ou chave pública e privada, ou simplesmente de
chave pública.
Assim como o algoritmo Diffie-Hellman deu início a uma nova era na criptografia moderna, o uso de um
valor arbitrário público é o principal ponto dessa nova abordagem. Qualquer pessoa pode ter acesso a
essa informação pública e, mesmo assim, não conseguir derivar
nenhum tipo de informação a partir dela, como, por exemplo, qual foi
a chave privada utilizada, qual a mensagem original em texto claro
que se transformou em uma mensagem criptografada e daí por
diante.
Durante os estudos do algoritmo Diffie-Hellman, você percebeu que a
dificuldade de se achar determinados valores possui uma base
puramente matemática. Os principais algoritmos de criptografia de
chave pública também utilizam uma forte base matemática que os tornam computacionalmente
impraticáveis em termos de quebra criptográfica. Na prática, há uma quantidade razoavelmente ampla
de algoritmos de chave assimétrica, mas apenas alguns deles são considerados realmente passíveis de
implementação: o RSA4, o El Gamal, o Rabin e o ECC. Eles se baseiam em problemas matemáticos de
difícil resolução, como a fatoração de números primos grandes, até mesmo para um supercomputador.
Além disso, a criptografia de chave pública veio resolver não somente a questão da troca de chaves de
forma segura, mas também garantir a confidencialidade dos dados, a autenticidade e o não repúdio de
seus autores. Esses tópicos serão abordados na UIA 4.
Um conceito derivado diretamente deles é o termo assinatura digital. É possível afirmar que Diffie-Hellman
já propunha isso em sua solução para a troca de chaves. Esses são pontos cruciais para quaisquer
algoritmos de chave pública, pois a utilização prática deles em alguns casos necessita daqueles três
fundamentos, pelo menos. Entretanto, tenha cautela ao analisar a questão da resolução do problema de
troca de chaves simétricas: os algoritmos de chave pública, na prática, não substituem o uso da abordagem
simétrica, mas os complementam. Os detalhes de como isso é feito serão demonstrados adiante.
Você irá notar, posteriormente e de forma detalhada, que o par de chaves é algo associado a algum
indivíduo ou organização, já que um dos princípios da criptografia assimétrica também é prover a
autenticidade de seus atores.
A criptografia de chave pública também é categorizada como computacionalmente segura porque o
espaço amostral das chaves, ainda que notadamente maior que a abordagem simétrica, pode ser
exaurido em algum determinado momento. Portanto, o projeto dos algoritmos de chave pública deve
sempre levar isso em consideração.
O princípio fundamental por trás da criptografia de chave pública reside,
então, na interação de duas partes:
Percebeu a diferença?
A geração da chave privada é um processo tão importante que o seu comprometimento, quando e se
houver, é equivalente a uma quebra criptográfica por força bruta.
4
Algortimo de chave pública que utiliza um par de chaves: uma privada e uma pública. Inventado por três criptólogos do MIT:
Ronald Rivest, Adi Shamir e Leonard Adleman.
Copyright © 2016 Centro Universitário IESB. Todos os direitos reservados.
CRIPTOGRAFIA: ALGORITMOS E CERTIFICAÇÃO DIGITAL | UIA 3 | 11
A geração das chaves utiliza algoritmos CSPRNG e um elevado grau de entropia: a combinação de vários
processos em execução em um determinado período no computador do usuário. Esse processo de
entropia e o conceito de um gerador pseudoaleatório foi explanado em detalhes na aula anterior.
Duas propriedades cruciais definem bem a segurança das chaves privada e pública em
qualquer dos algoritmos de chave assimétrica:
1. As chaves estão relacionadas matematicamente entre si, já que uma é derivada da
outra.
2. Sabendo o conteúdo da chave pública, é computacionalmente impraticável
derivar a chave privada da chave pública.
Você perceberá adiante que a relação matemática entre elas faz com que a mecânica de troca de
mensagens criptografadas resolve de vez o problema de troca de chaves, que é uma problemática
intrínseca dos algoritmos simétricos. Uma das chaves geradas – a chave pública – possui essa
terminologia porque ela pode e deve ser conhecida por qualquer um que queira criptografar uma
mensagem com essa chave.
Do ponto de vista da criptoanálise, um criptoanalista que está de
posse da chave pública de um usuário pode criptografar qualquer
mensagem em texto claro e comparar com a mensagem cifrada. Se a
quantidade de mensagens cifradas existentes for muito pequena, as
chances de um criptoanalista descobrir o conteúdo da mensagem
cifrada são muito grandes.
Perceba que esse tipo de “ataque” não compromete necessariamente
a chave privada ou sequer o algoritmo de criptografia. É uma simples
e natural característica dos algoritmos. Entretanto, hoje, é
computacionalmente impraticável executar ataque, porque as chaves
públicas possuem, historicamente, um tamanho significativamente
maior em comparação a quando os algoritmos foram inventados. O
custo computacional de se criptografar grandes mensagens ou
grandes massas de informações é uma das desvantagens dos criptossistemas assimétricos.
Em geral, o tamanho máximo prático do par de chaves hoje é de 4.096 bits, o que dá uma margem
computacional muito grande em termos ataque de força bruta. A necessidade de se ter chaves desse
tamanho, em comparação com a abordagem simétrica, reside basicamente no fato de que algoritmos de
chave pública utilizam problemas matemáticos, ao passo que algoritmos de chave simétrica utilizam
combinações de operações lógicas e permutações. Para se ter uma ideia da comparação de
desempenho, algoritmos de chave assimétrica demoram quase dez vezes mais para cifrar o mesmo
tamanho de dados em comparação com algoritmos simétricos.
Finalmente, como funciona a mecânica básica dos criptossistemas assimétricos, ou de chave pública? Duas
partes, X e Y precisam trocar mensagens de e-mail entre si, utilizando algum algoritmo de chave pública, onde:
X = parte 1
Y = parte 2
T = mensagem em texto claro
E = mensagem em texto cifrado
X’ = chave pública de X
Y’ = chave pública de Y
1. X e Y trocam por e-mail suas chaves públicas, X’ e Y’.
2. X, de posse da chave pública Y’, cifra uma mensagem “T”, utilizando a chave
pública de Y em conjunto com sua chave privada.
3. A mensagem “T” se transforma em mensagem “E”, cifrada com a chave privada de
X e a chave pública de Y.
4. X envia a mensagem “E” por e-mail para Y.
5. Y, de posse da chave pública X’, decifra a mensagem “E” com a sua chave privada.
Leia mais sobre esse nosso último assunto acessando o link disponível a
seguir.
http://tinyurl.com/jd3bkm5
De uma forma geral, o esquema mostrado acima funciona muito bem para informações de pequeno
tamanho, já que o custo computacional é relativamente grande para informações muito grandes.
Considere como um custo computacional alto não somente os esforços computacionais, como memória
RAM, CPU e dispositivos de entrada e saída, mas também o tempo que se leva para efetuar tais
operações. É possível que determinadas operações levem horas para serem finalizadas. Daí decorre o fato
de termos uma quantidade de algoritmos assimétricos que são computacionalmente seguros, mas a
implementação prática inviabiliza a usabilidade por parte de usuários finais, ou até mesmo por parte de
grandes centros de computação que precisam cifrar grandes quantidades de informações.
Além do esquema clássico mostrado acima, é possível também que qualquer usuário, de posse apenas
da chave Y’ (a chave pública da parte Y), mas que por si só não tenha um par de chaves, criptografe uma
mensagem para Y. Y conseguirá decifrar a mensagem normalmente com a sua chave privada, já que a
mensagem foi cifrada utilizando sua chave pública. Como elas estão relacionadas entre si, tal operação é
plenamente possível. O que não será possível é Y enviar uma mensagem cifrada de volta para o usuário
que a enviou originalmente, pois ele não possui um par de chaves.
Você pode estar se perguntando: todos os usuários que possuem um par de chaves
assimétricas precisam trocar entre si as suas chaves públicas para que uma
comunicação segura entre eles ocorra?
Chegamos ao final de mais uma aula. Estamos no caminho para adquirir as competências e habilidades
proporcionadas por esta Unidade de Interação e Aprendizagem (UIA). A próxima detalhará o principal
algoritmo de criptografia assimétrica, o RSA. Até lá.
Bem-vindos à Aula 14. Nesta aula, abordaremos um pouco da história e os detalhes do algoritmo de
criptografia assimétrica RSA. Continue os estudos desta disciplina e boa aula!
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n
O RSA é, provavelmente, o algoritmo de chave pública mais utilizado mundialmente. De fato, tornou-se
um verdadeiro padrão de criptografia assimétrica e é utilizado por inúmeras aplicações, plataformas e
protocolos ao redor do mundo. A sigla RSA deriva dos nomes de seus autores, os criptólogos Ronald
Rivest, Adi Shamir e Leonard Adleman.
Definição clássica de um número primo: Um inteiro p ≠ ±1 é um número primo quando seus únicos
divisores são ±1 e ±p. Um dos métodos formais de se descobrir se um inteiro qualquer é primo ou não é
fatorando-o.
Somente poderosos computadores possuem essa capacidade e ainda assim levam uma grande
quantidade de tempo para descobrir se é ou não um número primo. Ou seja, responder à pergunta “É
primo, ou não?” é um problema matemático-computacional dos mais complexos.
Leia mais (em inglês) sobre essa explicação, acessando este outro site,
disponbivel no link a seguir.
http://tinyurl.com/jgvxd68
Tente executar o código-fonte a seguir em um interpretador Python, procurando pelos números primos
entre 2 e 1000:
Observação: a identação do código-fonte em Python é fundamental.
#!/usr/bin/env python
Copyright © 2016 Centro Universitário IESB. Todos os direitos reservados.
CRIPTOGRAFIA: ALGORITMOS E CERTIFICAÇÃO DIGITAL | UIA 3 | 16
um número N tem mais do que 10160 dígitos e é alcançado como produto de dois números primos, cada
qual com mais de 1070 dígitos, torna-se, então, computacionalmente impraticável encontrar P e Q.
No RSA, a chave secreta jamais deverá ser exposta a ninguém, ao passo que a chave pública é difundida
sem restrição alguma. A regra de segurança crucial da cifra RSA garante que é computacionalmente
impraticável deduzir a chave secreta a partir da chave pública apenas. Esse é o fator de sucesso do
algoritmo.
Idealmente, a escolha de P e Q deve ser aleatória entre um rol de números primos grandes. Se P e Q
forem escolhidos baseados em algum fator determinístico, a chance de um atacante conseguir descobri-
los é maior, mas não necessariamente muito maior. Daí a importância do uso de um CSPRNG aplicado a
números primos.
Além disso, o algoritmo RSA especifica a escolha de alguns números para compor a operação de
criptografia. O primeiro deles é um número chamado de coprimo5, que, no RSA, é dada pela função φ(x)
= (p - 1) * (q - 1). Calcular tal número é tão ou mais difícil do que determinar os fatores de um número
primo, como P e Q.
O segundo deles é um número “e”, em que 1 < “e” < φ(x), de forma que “e” seja coprimo de φ(x). Assim, o
número “e” é definido na prática pelo MDC(φ(x), e) = 1, sendo e > 1. A chave pública fica então definida
pelo conjunto (N, e).
A chave privada é encontrada utilizando o inverso multiplicativo modular do número “e”. Um inverso
multiplicativo é conhecido na matemática como a * (a ^ -1) = 1. Ora, se todo número possui um inverso
multiplicativo, então, o MDC(φ(x), e) = 1. Assim,
1 = 𝑑×𝑒 − (𝑟×𝜑(𝑥))
Onde “d” é o inverso modular de “e”.
Você, aluno, não precisa decorar tais fórmulas ou aplicá-las no seu dia a dia, porque o algoritmo RSA é
implementado na prática por alguns aplicativos.
Finalmente, a função de cifragem e decifragem do RSA é definida pela aritmética modular, mais
precisamente pelas seguintes funções, respectivamente:
c = me mod N
m = cd mod N
Onde “e” e “N” fazem parte da chave pública e “m” é o valor numérico da letra correspondente de uma
mensagem qualquer.
O inverso é verdadeiro, onde “d” é a chave privada, determinada pela fórmula acima.
Em relação à quantidade de bits do par de chaves do RSA, é estimado que 1.024 bits de uma chave RSA
equivalem a 80 bits do algoritmo AES, por exemplo. Atualmente, a implementação do RSA opera em
5
Chamamos números primos entre si (ou coprimos) um conjunto de números onde o único divisor comum a todos eles é o
número 1. Um conjunto de números inteiros é chamado de mutuamente primo se não existir um inteiro maior do que 1 que
divida todos os elementos. Por exemplo, os inteiros 30, 42, 70 e 105 são mutuamente primos.
Copyright © 2016 Centro Universitário IESB. Todos os direitos reservados.
CRIPTOGRAFIA: ALGORITMOS E CERTIFICAÇÃO DIGITAL | UIA 3 | 18
versões com 1.024, 2.048 e 4.096 bits. É preciso esclarecer que, quanto maior o tamanho do par de
chaves, maior é o custo computacional. Portanto, conforme dito na aula anterior, essa é uma
desvantagem clara do RSA por conta das operações matemáticas envolvendo a fatoração de grandes
números primos.
Apesar do RSA ser amplamente utilizado mundialmente em várias aplicações, seu uso está restrito ao
ciframento de pequenas quantidades de dados, pois, como vimos nesta aula, seu desempenho é
comprometido para grandes massas de dados. Vale relembrar que o RSA não veio somente resolver o
problema da troca de chaves, mas também o da autenticidade, como veremos na próxima UIA.
Chegamos ao fim de mais uma aula da UIA 3. Continue estudando para desenvolver as competências e
habilidades necessárias a essa área de atuação e do conhecimento. Até a próxima.
6
Sistema de criptografia que utiliza algoritmos criptográficos bem conhecidos para cifrar mensagens de e-mail, mas também
pode ser utilizado para cifrar arquivos.
Copyright © 2016 Centro Universitário IESB. Todos os direitos reservados.
CRIPTOGRAFIA: ALGORITMOS E CERTIFICAÇÃO DIGITAL | UIA 3 | 19
A versão inicial do PGP utilizava um algoritmo de criptografia proprietário inventado também por Phil
Zimmermann, chamado de BassOmatic. Phil trocou o seu uso pelo padrão americano à época, o IDEA.
Apesar da implementação de algoritmos simétricos no começo e uma série de disputas judiciais entre
ele, o governo americano e a RSA Security Inc., o PGP foi de fato o primeiro programa disponível
abertamente para uso criptográfico em mensagens de e-mail, utilizando criptografia de chave pública.
Entre as idas e vindas em torno do PGP, o nome PGP é hoje uma marca adquirida pela empresa de
segurança Symantec. Contudo, o software PGP e sua concepção original ainda podem ser utilizados
livremente sob licenças de código aberto, além de ser padronizado pela RFC 4880 (NETWORK WORKING
GROUP, 2007), derivada do padrão OpenPGP. Praticamente todas as implementações abertas do PGP
seguem o padrão OpenPGP, o que significa dizer que você pode utilizar o PGP para salvaguardar suas
mensagens de e-mail tranquilamente, inclusive empregando quaisquer dos principais algoritmos
criptográficos existentes, como o AES, o Twofish, o RSA, MD5, SHA-256, RIPEMD, entre outros.
Vamos agora nos aprofundar nos detalhes de como o PGP funciona em termos de criptografia. Não
somente a dinâmica do programa – mas também as especificações oficiais – preveem que o PGP é de
fato um software híbrido. Apesar de criar pares de chaves, públicas e privadas, as operações
criptográficas são um composto de cifragens simétricas e assimétricas. Em linhas gerais, a chave simétrica
a ser utilizada para cifrar o texto claro é cifrada com a chave pública do destinatário. O destinatário,
então, decifra a chave simétrica para então decifrar o texto cifrado.
Um dos pré-requisitos fundamentais para o uso massivo do PGP é o uso e a distribuição das chaves
públicas. A criação do par de chaves, que de uma certa forma estará associada a um usuário, precisa ser
“protegida” por uma frase-senha, porque uma das chaves precisa ser mantida em segredo: a chave
privada.
Copyright © 2016 Centro Universitário IESB. Todos os direitos reservados.
CRIPTOGRAFIA: ALGORITMOS E CERTIFICAÇÃO DIGITAL | UIA 3 | 20
Uma vez criada, a chave pública pode ser distribuída de qualquer forma. Uma delas é o proprietário
enviar a chave por e-mail junto com a mensagem cifrada. Outra forma é efetuar o upload da chave
pública para um repositório de chaves.
Se você pesquisar em um desses servidores públicos PGP pela chave “0x196FE3EE”, você encontrará a
chave PGP válida do autor desse material. Toda chave PGP possui um “Key ID”, representado, na maioria
dos casos, por uma string hexadecimal.
Um dos softwares de código-fonte aberto que implementa o padrão OpenPGP é o famoso GnuPG,
mantido pelo projeto GNU. O GnuPG pode ser utilizado livremente em várias plataformas UNIX, que
também foi portado para a plataforma Windows através do Gpg4win, também mantido pelo próprio
projeto GNU, em uma tentativa de favorecer o seu uso em diferentes sistemas operacionais.
Na plataforma UNIX, um par de chaves pode ser criado com o seguinte comando em um Shell UNIX. O
comando fornece uma interação direta com o usuário durante o processo de geração das chaves,
conforme demonstrado a seguir.
[root@bsd11 ~]# gpg --full-gen-key
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Requested keysize is 4096 bits
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 2y
Após a geração do par de chaves, cujo algoritmo de chave pública escolhido foi o RSA, a chave pública
do usuário hipotético “crypto-teste” pode ser exportada com o seguinte comando. Observe a string ---
--BEGIN PGP PUBLIC KEY BLOCK-----: ela identifica um bloco de dados que corresponde à
chave pública do usuário. Tal informação ou bloco de dados é público e, de acordo com os princípios da
criptografia, é impraticável derivar a chave privada a partir das informações contidas no bloco de dados
da chave pública.
Version: GnuPG v2
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
pt2K0PX7XyxvQxYj0a/vmmY=
=deS7
-----END PGP PUBLIC KEY BLOCK-----
hQEMA1rKd58Zb+PuAQgAi9qXy69EFJ8wnd0FIc+cvMa3xHI/GR3tRbWZxBx1SRo+
StxX+e9zAUQPN5JiYzvMwM2kWJbRndGU3VADoDkqIuXJeibN3qKbLQPRqSfBVryD
B04p8z3wbKvpznak2YrJTN+DMu72Sk/sYZN1Uuq5OG4ugk1K974pyzn3bbdCbMzD
wvel8xRCCAABXvSf9WtK+5JXpXaf1T/ZasgYxvuCeLoAKwNBeu0TaZWOFl2Fu7bw
MCmoimtfcgOgR9ra6/xhk7ji5NgXF73YAEZi/VyKP12NFwFZv1VzHvwtZZY+f4Nm
tAz+5hCf5uJuXTfWJXK0IKOWgVaKnjhHapiLxMfN9IUCDAMrQS6fTUExIwEQAKvO
oQV4fbOVxar9/mo+GEz4GBNE6ZqRslUtrWmFadYRgiFWW1XgGzBjbN+oGHEpNg/o
fWU2adtBa5VF9xd+xYzSrF0MkI7IBU3ScdaOo+sSLm3FRHGE+HwurVAfoB+2IJaa
xgNmCJBLYvXc2vsHiLHFO6K/uaGK8SY1MdKpM1qOKRV/CKMYdmH6Wm+zTvP9Ndw2
NHpco6+o356L4MAwIkzkVuMT64HmwCdikfjvW4+h9A3JEMpAJ3gXEpGSH7u7bdaG
+ityFklalIbtbTBTKq7PBOAgk1RdBFZaaKuO48IF4SB8uSoq2DvdbZLl3/7QsgQV
ldt0n3p2H926ze7tJewZtjV3h86glOKefBHs4giLHkaPVdiN9d4nI0aCiXNvbanX
Cc1cvYsPzzjTflG7YGOi9PMSJISTez3X+G2uUTnB5yW0b33d735sD7JNJmXkjIL0
G2NXZ/dRCkK2znQrP0tY25D6KE+qTInApP8X9HO9F2b8vaxA0XIduoti8U5Twrwg
6bKZXHVH0iqKTIERxpiB8vQlsXiFQL294HXbnvQeVq3SLGeGKVF3NXpKgq65X/sK
6Aa0861G6Ax0XH9cGiYCzq3D56sxZW2FAw8wORD80ImsospNWa3N8ci5TZh91vBA
4et/Kb8YGqu2XDJPc21YDg7/k9sHP/j/onMQwVcg0kcBFTdJnxTZCePA/1IcHU5N
2xU2dhUoB2claPnQcqN6n2beU7nzjMu5vnWRXJBbY0KkMSrCQuFJYmvWk6VUD/fl
kpx0Vnx2Ow==
=y0rp
-----END PGP MESSAGE-----
O bloco acima é o resultado da cifragem do arquivo “teste.txt”, que contém a palavra “teste”. A string --
---BEGIN PGP MESSAGE----- identifica o início de um bloco de dados cifrado e a string -----
END PGP MESSAGE----- identifica o fim desse mesmo bloco cifrado.
Você, estudante, pode estar se perguntando: Tal mensagem não deveria estar
guardada em segredo?. Não esqueçamos que, segundo o princípio de Kerckhoffs, a
única informação que deve ser guardada em segredo é a chave (privada nesse caso).
Se a mensagem acima for transmitida por um meio inseguro e esta mesma mensagem for interceptada, é
computacionalmente impraticável chegar ao texto claro “teste”. Nesse sentido, o PGP pode ser utilizado
com uma grande margem de segurança para a transmissão de mensagens ou arquivos cifrados.
Chegamos ao fim de mais uma aula! Vamos seguir estudando! Até a próxima!
Diferentemente dos algoritmos de chave única, os algoritmos de chave assimétrica têm, em sua maioria,
a aplicação direta de problemas matemáticos como forma de criar uma alta margem de segurança. Não é
costume fazer uma equivalência direta e determinística do nível de segurança entre algoritmos
simétricos e assimétricos, e isso se dá pelo fato de todos eles serem computacionalmente seguros. Todos
eles possuem uma margem de segurança muito alta. Entretanto, alguns algoritmos de chave pública, e
até mesmo alguns de chave simétrica, não são diretamente aplicáveis ao mundo real, porque demandam
um alto custo computacional, demandam muito processamento.
Para exemplificar – de forma até muito ampla – a questão da aplicabilidade desses algoritmos, vamos
relembrar o conceito da “procura por números primos”. Vimos na nesta UIA um programa escrito na
linguagem Python que procura por números primos dentro de um intervalo finito de números. Um simples
teste de tempo de execução, considerando vários intervalos de busca, nos revela o seguinte resultado,
através do seguinte experimento prático: executaremos o programa em Python (cujo código-fonte está
disponível na Aula 14) e mediremos o seu tempo com o binário time, presente em praticamente todas as
distribuições UNIX. Começaremos com 10 e pularemos para 100, 1.000, 10.000 e 10.0000.
mc$ time ./primos.py 10 &>/dev/null
real 0m0.034s
user 0m0.021s
sys 0m0.011s
mc$ time ./primos.py 100 &>/dev/null
real 0m0.034s
user 0m0.021s
sys 0m0.011s
mc$ time ./primos.py 1000 &>/dev/null
real 0m0.048s
user 0m0.034s
sys 0m0.011s
mc$ time ./primos.py 10000 &>/dev/null
real 0m1.126s
user 0m1.105s
sys 0m0.016s
mc$ time ./primos.py 100000 &>/dev/null
real 1m52.098s
user 1m48.372s
sys 0m1.601s
Perceba acima que o tempo “real” para a execução do programa entre os valores 10 e 100 não varia tão
significativamente, mas o tempo quase dobra quando passamos para 10.000 ou 100.000. A execução na
busca por primos até 1.000.000 demoraria vários minutos ou até horas para finalizar.
Você está certo se chegou a fazer essa pergunta, porque algumas variáveis devem de fato ser
consideradas, como qual o processador utilizado, se outros programas estavam em execução, o sistema
operacional utilizado, se foi utilizado paralelismo na execução da busca pelos números primos, entre
outros fatores importantes. Uma das formas de acelerar esse processo de execução seria utilizar
paralelismo de tarefas, cuja funcionalidade é presente na linguagem Python.
Esse experimento consequentemente demonstra – de forma simples – que uma relativa simples
operação matemática como aquela pode consumir recursos computacionais. Cabe reafirmar que, na
Matemática, não há uma fórmula ou algoritmo exato para determinar se um inteiro é primo ou é
composto, apenas métodos aproximados.
Assim, algoritmos de chave pública, a exemplo do RSA, que utiliza fatoração de grandes números primos,
é computacionalmente “muito custoso”, pois demanda uma grande massa de cálculos matemáticos.
Seria possível utilizar chaves assimétricas com espaços amostrais maiores que 4.096
bits, como 8.192, por exemplo? A resposta é sim.
Pode-se afirmar que o ElGamal é derivado dos conceitos do algoritmo Diffie-Hellman. Curiosamente,
Taher Elgamal teve como seu orientador de doutorado, em meados da década de 1980, o criptólogo
Martin Hellman, um dos inventores do Diffie-Hellman. Contudo, o algoritmo de criptografia ElGamal é
baseado no problema matemático que envolve a resolução de logaritmos discretos.
Sem adentrarmos nos mínimos detalhes da criação das chaves do ElGamal, o algoritmo precisa
primeiramente escolher aleatoriamente um número primo qualquer “p > 2”. Por razões matemáticas que
já conhecemos, quanto maior esse número, menores as chances de alguém “descobri-lo ao acaso” ou
computacionalmente. Uma segunda etapa do algoritmo, não menos importante, é a escolha de um
número inteiro qualquer “x” entre 1 e (p – 1). Segundo a descrição do próprio algoritmo, “x” deve ser a
chave privada e deve ser mantido em segredo pelo seu criador. O valor “x”, em geral, deve ser utilizado
apenas uma única vez. O restante dos valores pode ser publicado.
A dificuldade em achar “x” também reside no fato das operações matemáticas envolvendo logaritmos
discretos serem tão complexas quanto fatorar grandes números primos, até mesmo
computacionalmente. Ou seja, reverter para o valor “x” a partir de “p” ou (p – 1) é computacionalmente
impraticável no ElGamal.
Além disso, o ElGamal produz diversos “textos cifrados” a partir do “texto claro”, quase na razão de 2:1, ou
seja, para um texto claro qualquer, há uma variedade enorme de “diferentes saídas”. Essa é uma
vantagem do ElGamal em comparação ao RSA.
Sobre as funcionalidades do ElGamal, ele é uma das opções de algoritmos disponíveis no PGP e para os
processos de assinatura digital como um todo. Várias aplicações o utilizam como geradores de
assinaturas digitais, conceito que veremos com maior profundidade na próxima UIA.
Um outro algoritmo de chave pública datado de 1979 é o Rabin, cuja designação deriva do nome de seu
inventor, o criptólogo israelense Michael Oser Rabin. Da mesma forma que o RSA, o Rabin considera o
problema da fatoração de grandes números primos, só que especialistas da área conjecturam que o
Rabin provou ser matematicamente mais forte que o RSA porque o método matemático utilizado pelo
Rabin é considerado relativamente mais eficiente.
Em termos de aplicabilidade e usabilidade, até mesmo
comparado com os demais algoritmos de chave pública
vistos até agora, o Rabin não é largamente utilizado no
mundo criptográfico. Não é possível determinar uma
razão exata para tal fato.
Nesse ponto de nossa disciplina, você, estudante, pode
perceber que há uma diferença clara entre as
abordagens de chave simétrica e assimétrica: os de
abordagem assimétrica são baseados em problemas
matemáticos – de acordo com a teoria da complexidade computacional – denominados de intratáveis,
pois são resolvidos na teoria, mas na prática requerem muito tempo para uma solução “completa”. O
problema da fatoração de números inteiros é um deles. Nesse sentido, a segurança desses
criptossistemas reside na dificuldade de uma solução prática daqueles problemas matemáticos. Então,
teoricamente, uma vez resolvidos, talvez a “segurança” do RSA, ElGamal e Rabin fique comprometida.
Finalmente, uma outra abordagem mais avançada dentro dos criptossistemas assimétricos é o que
chamamos de criptografia baseada em curvas elípticas (Elliptic Curve Cryptography). O método de
criptografia do tipo assimétrico com base em curvas elípticas (ECC) foi proposto por dois pesquisadores,
Copyright © 2016 Centro Universitário IESB. Todos os direitos reservados.
CRIPTOGRAFIA: ALGORITMOS E CERTIFICAÇÃO DIGITAL | UIA 3 | 28
Neal Koblitz e Victor Miller, em 1985, tendo como base matemática equações envolvendo curvas
elípticas.
O interesse por este preceito se deu pelo fato de a criptografia com base em curvas
elípticas proporcionar o mesmo nível de segurança que outros algoritmos
tradicionais, mas utilizando chaves exponencialmente menores.
Esse feito simplifica o desenvolvimento de aplicativos de segurança para dispositivos móveis, como
smartphones, pagers, tablets, entre outros, que possuem um poder de processamento e armazenamento
bem limitados em comparação com outros dispositivos computacionais utilizados em nosso dia a dia.
Na prática, existem diversas formas de se implementar um algoritmo com base em curvas elípticas, mas,
em princípio, todas elas atendem à seguinte definição matemática: Uma curva elíptica no conjunto dos
números reais pode ser definida como o conjunto de pontos (x,y) que satisfaça a seguinte equação:
𝑦 8 = 𝑥 9 + 𝑎𝑥 + 𝑏
Onde a e b são constantes reais, assim como as variáveis x e y.
Matematicamente, uma curva elíptica é simétrica, o que equivale a dizer que ela possui forma reflexiva,
semelhante em ambos os eixos.
Não é necessário que você, estudante, tente resolver essa equação demonstrando todo o espaço
amostral de resoluções. É suficiente saber que dois pontos da curva que atende a essa equação são os
pontos-chave para o uso criptográfico. Sejam, pois, P = (x1; y1) e Q = (x2; y2) dois pontos distintos
tomados em uma curva elíptica E. A soma desses dois pontos forma uma curva elíptica, que é definida
pelo traçamento de uma linha que atravesse P e Q. A soma é igual a R, que é chamado ponto de reflexão,
que forma a simetria mencionada anteriormente.
As chaves na criptografia de curvas elípticas são escolhidas para serem exponencialmente menores, com
praticamente o mesmo nível de segurança de outros algoritmos assimétricos. Sobre a segurança do ECC,
nenhuma prova matemática de dificuldade foi publicada para a criptografia de curva elíptica até hoje. Há
alguns ataques teorizados por especialistas, mas nada concreto. Entretanto, a NSA já defendeu a
tecnologia de criptografia de curva elíptica.
Copyright © 2016 Centro Universitário IESB. Todos os direitos reservados.
CRIPTOGRAFIA: ALGORITMOS E CERTIFICAÇÃO DIGITAL | UIA 3 | 29
Ainda, conquanto a patente de RSA tenha expirado, há patentes que cobrem alguns aspectos de
criptografia de curva elíptica, e seu uso ainda está relativamente restrito.
Chegamos ao final de mais uma aula. Até a próxima, aula na qual finalizaremos nossa Unidade de Interação e
Aprendizagem (UIA).
Bem-vindos ao final da Unidade da Interação e Aprendizagem 3. Esta é a última aula desta UIA e, nela,
abordaremos um estudo de caso que envolve o conceito de moedas digitais, ou simplesmente
cryptocurrencies. Não será objeto de estudo avaliar se as moedas digitais são ou não vantajosas, ou fazer uma
correlação de valores com outros papéis-moedas, mas sim descrevê-las do ponto de vista de segurança, de
forma abrangente. Bons estudos!
Quantos de nós não utiliza o internet banking para efetuar transações financeiras,
como pagamentos e transferências via Internet?
A exemplo de transações financeiras tradicionais, os conhecidos boletos bancários, que geram uma
sequência de números, é um espelho de como os algoritmos em geral fazem parte do mundo financeiro.
Obviamente, os números gerados em um boleto não são o resultado de um algoritmo criptográfico em
si, mas possuem uma lógica matemática criada para facilitar a emissão desse tipo de elemento. O
resultado dos números é traduzido em um código de barras unidimensional, e esse código pode ser
utilizado em diversas aplicações para facilitar a leitura dos números.
Você já deve ter observado que muitos dos códigos de barras existentes hoje estão migrando para um
padrão conhecido como “QR (Quick Response) Code”, que é um código de barras bidimensional e que
pode armazenar qualquer tipo de informação. O Banco do Brasil utiliza QR Codes gerados na hora para
efetuar uma espécie de autenticação adicional em transações bancárias, pois somente o cliente
cadastrado com o aplicativo em mãos consegue efetuá-las quando o recurso está habilitado. O nome
dessa aplicação específica foi batizado de “BB Code” e utiliza o HMAC como uma de suas bases de
segurança.
Pois bem, dentro desse amplo conceito de sistemas financeiros, insere-se o termo “moeda digital”.
Entretanto, não será objeto desta aula detalhar minuciosamente os algoritmos inventados para as
cryptocurrencies. O conceito de moeda digital é, ao mesmo tempo, simples e muito complexo, pois seu
objetivo e resultados finais são simples, mas todos os pré-requisitos envolvidos no conceito e na
implementação são bem complexos, pois não envolve somente a taxonomia e a epistemologia das
“ciências econômicas” por si só, mas também das ciências da Computação e da Engenharia como um
todo, a exemplo de considerações sobre internet, redes peer-to-peer (P2P), protocolos de redes, sistemas
distribuídos e a essencial criptografia.
7
Tipo de moeda digital utilizada largamente para transações financeiras sem um intermediador. Utiliza métodos criptográficos
para garantir a segurança das transações e da própria rede Bitcoin.
Copyright © 2016 Centro Universitário IESB. Todos os direitos reservados.
CRIPTOGRAFIA: ALGORITMOS E CERTIFICAÇÃO DIGITAL | UIA 3 | 31
Há várias maneiras de explicar seu conceito e, mais adiante, detalharemos alguns de seus aspectos mais
técnicos. A primeira definição, e talvez a mais simples, é uma forma de dinheiro, assim como o real, o
dólar e o euro, com a grande diferença de ser genuinamente digital e não ser expedido por nenhum tipo
de governo ou banco ou nação. O seu valor é assentado pelos indivíduos no mercado. Para acordos e
transações on-line, é a forma ideal de pagamento, pois é rápido, sem custo algum e provavelmente a
forma mais segura existente até hoje.
Uma segunda definição seria: é uma moeda e um sistema de
pagamento ao mesmo tempo. O usuário, dono da moeda,
guarda o seu próprio balanço. Isso equivale a dizer que o
usuário pode ser seu próprio banco, pois ele é depositante e
depositário, simultaneamente. Os usuários podem efetuar
transações entre si sem depender de um intermediário ou um
banco, independentemente de sua localização geográfica.
Similarmente ao papel-moeda, de criação exclusiva do
sistema bancário de cada país, o Bitcoin é uma moeda
imaterial, cuja forma é controlada estritamente pelo algoritmo
e pelas operações criptográficas.
Dando uma visão mais técnica, o Bitcoin é um software de código-fonte aberto, mantido por uma rede
de computadores distribuída (peer-to-peer ou P2P), onde cada dispositivo é, ao mesmo tempo, cliente e
servidor. Não há uma central, nem qualquer entidade controlando a rede. O protocolo utilizado pelo
Bitcoin é baseado em padrões criptográficos abertos e define as regras de funcionamento do sistema, às
quais todos os nós da rede devem aderir, assegurando a veracidade das transações realizadas e evitando
qualquer transgressão das regras, matemática e computacionalmente falando, pois elas são
determinísticas e não estão sujeitas a erros humanos. Entretanto, todas essas definições não podem
demonstrar que o Bitcoin é completamente seguro, pois se alguém se apoderar de sua chave privada na
rede Bitcoin, teoricamente sua “carteira” é perdida para sempre.
Acerca do conceito mais amplo de segurança do Bitcoin, os nós são o ponto central da segurança da rede
Bicoin (cujo termo será alterado para Block Chain8 mais adiante), pois alguém com poder computacional
muito grande pode, teoricamente, tomar conta de todas as verificações criptográficas, atrasando-as, o
que permite rever de volta o que o atacante gastou em Bitcoins. O termo ressarcimento não existe no
sistema de pagamento Bitcoin: uma vez enviado não há a possibilidade de reversão, pois essa é uma das
especificações do protocolo.
Toda movimentação Bitcoin começa com a criação de uma carteira, e essa carteira é “identificada” pelo
par de chaves pública e privada. Essencialmente, uma carteira é um arquivo que contém ao menos uma
chave privada, mas é protegida por uma frase-senha, e o conceito de carteira se aplica somente ao lado
“cliente”. Aqui reside um conceito importantíssimo acerca do esquema de segurança de uma carteira
Bitcoin: uma vez comprometida sua carteira, você pode perder o acesso a ela, semelhantemente ao
conceito de um par de chaves PGP.
Sobre as transações (envio ou recebimento de Bitcoins), elas devem ser identificadas por um endereço de
destino único, e esse endereço único só deve ser utilizado para aquela transação específica. A maioria dos
softwares Bitcoin e alguns sites podem ajudar nesta tarefa, gerando um endereço novo cada vez que
você criar uma solicitação de pagamento. Eles são gerados sem custo algum. Um endereço Bitcoin é um
identificador de 26 a 34 caracteres alfanuméricos, começando com o número 1 ou 3, que representa um
possível destino para um pagamento Bitcoin.
Você, estudante, pode estar se perguntando: Então, há uma espécie de anonimato nas
transações? Sim, pois cada endereço em uma transação é utilizado apenas uma vez.
Determinada pessoa pode até divulgar em sua rede social um endereço Bitcoin e alguém associar a essa pessoa,
mas isso só acontecerá uma vez. Como o endereço é gerado por hashes criptográficos, como o SHA-256 e o
RIPEMD-160, é computacionalmente impraticável determinar a quem pertence tal endereço de pagamento.
Uma cópia completa do Block Chain contém cada transação já realizada na rede Bitcoin, e essa cópia com
novas transações são enviadas via broadcast para todos os mineradores. Com essa informação, pode-se
descobrir o quanto de valor pertencia a cada endereço em qualquer momento da história da rede.
Na prática, o “bloco original” gerou um “novo bloco”, cujo hash é calculado com base no hash do bloco
anterior. Essa cadeia de hashes é o que caracteriza o Block Chain. Como o bloco é criptograficamente
seguro, ou seja, a sua integridade é garantida com o uso de algoritmos de hash, é praticamente impossível
alguém alterar algum valor na cadeia sem alterar os valores iniciais. Portanto, daí pode-se concluir que
utilizar um mesmo valor para duas ou mais transações pode gerar um problema enorme na rede Bitcoin.
Copyright © 2016 Centro Universitário IESB. Todos os direitos reservados.
CRIPTOGRAFIA: ALGORITMOS E CERTIFICAÇÃO DIGITAL | UIA 3 | 33
Por mais que o Bitcoin tenha sido o divisor de águas das moedas digitais modernas, há
outras implementações, inclusive algumas delas propondo melhorias no protocolo
Bitcoin. Litecoin, Auroracoin, Ripple e DigitalNote são alguns dos exemplos de outras
moedas digitais, que de uma forma geral foram derivadas do Bitcoin.
O Bitcoin tem lados vantajosos indiscutíveis, mas como toda nova moeda, sua aceitação depende da
vontade das pessoas, que, nesse caso em específico, não estão ligadas a nenhum Estado. Daí decorre que
a independência da moeda pode ficar prejudicada, já que outros mercados ou qualquer vendedor pode
simplesmente não aceitar trabalhar com Bitcoins. Entretanto, lojas on-line já perceberam a importância e
a segurança de uma moeda digital (ou cryptocurrency) quando comparada com métodos tradicionais de
pagamento e estão passando a aceitar Bitcoins diretamente, ou até mesmo indiretamente,
intermediados pelo PayPal, como um dos exemplos.
Além disso, o Bitcoin tem entrado em um lado controverso da segurança da informação por garantir até
certo ponto o anonimato dos endereços de pagamento, já que criminosos cibernéticos estão fazendo
uso massivo dessas moedas digitais para evitarem serem rastreados facilmente, característica presente
nos métodos tradicionais de pagamento. Vários desenvolvedores de Ransomware, por exemplo, exigem
o pagamento de Bitcoins para destravarem os arquivos das vítimas infectadas.
Chegamos ao final de mais uma unidade de interação e aprendizagem. Esperamos que tenham aproveitado!
Até a próxima UIA.
Você terminou o estudo desta unidade. Chegou o momento de verificar sua aprendizagem.
Ficou com alguma dúvida? Retome a leitura.
Quando se sentir preparado, acesse a Verificação de Aprendizagem da unidade no menu
lateral das aulas ou na sala de aula da disciplina. Fique atento, essas questões valem nota!
Você terá uma única tentativa antes de receber o feedback das suas respostas, com
comentários das questões que você acertou e errou.
Vamos lá?!
REFERÊNCIAS
SCHENEIR, B. Applied cryptography. New York: John Wiley & Sons, 1996.
GLOSSÁRIO
Bitcoin: Tipo de moeda digital utilizada largamente para transações financeiras sem um intermediador.
Utiliza métodos criptográficos para garantir a segurança das transações e da própria rede Bitcoin.
Block Chain: A essência de toda a rede Bitcoin, em que todas as transações confirmadas são
armazenadas. É um banco de dados único, mas distribuído via broadcast para toda a rede Bitcoin.
CSPRNG: Geradores de números pseudoaleatórios criptograficamente seguros. São algoritmos
destinados a prover a maior aleatoriedade possível utilizando como entropia recursos computacionais.
Coprimo: Chamamos números primos entre si (ou coprimos) um conjunto de números onde o único
divisor comum a todos eles é o número 1. Um conjunto de números inteiros é chamado de mutuamente
primo se não existir um inteiro maior do que 1 que divida todos os elementos. Por exemplo, os inteiros
30, 42, 70 e 105 são mutuamente primos.
Estocástico: Determinado pelas leis da probabilidade; aleatório.
LCG: Um dos mais simples geradores de números pseudoaleatórios, mas que não é apropriado para uso
criptográfico de larga escala.
PGP: Sistema de criptografia que utiliza algoritmos criptográficos bem conhecidos para cifrar mensagens
de e-mail, mas também pode ser utilizado para cifrar arquivos.
RSA: Algortimo de chave pública que utiliza um par de chaves: uma privada e uma pública. Inventado
por três criptólogos do MIT: Ronald Rivest, Adi Shamir e Leonard Adleman.