-
Neste segmento, quero falar sobre outra forma de criptografia, chamado formato
-
criptografia preservar. Esta é mais uma vez algo que surge na prática bastante
-
frequência, especialmente quando se trata de números de cartão de crédito de encriptação. E, assim,
-
vamos ver como ele funciona. Lembre-se que um número de cartão de crédito é típico 16
-
dígitos, divididos em quatro blocos de quatro dígitos cada. Você provavelmente já ouviu antes
-
que os primeiros seis dígitos são o que é chamado o número BIN, que representam o
-
ID emitente. Por exemplo, todos os cartões de crédito emitidos pela VISA sempre começam com o dígito
-
quatro; todos os cartões de crédito emitidos pela MasterCard início com dígitos 51 a 55, e
-
assim por diante e assim por diante. Os próximos nove dígitos são de fato o número da conta que é
-
específico para a, para o cliente em particular e do último dígito é uma soma de verificação
-
que é calculado a partir dos últimos quinze dígitos. Portanto, há cerca de 20.000 grande
-
números e por isso, se você fizer o cálculo acontece lá fora, são cerca de dois a 42
-
números de cartão de crédito possíveis, o que corresponde a cerca de 42 bits de
-
informação que você precisa para codificar se você quiser representar um número de cartão de crédito
-
compacta. Agora o problema é este. Suponha que nós queríamos para criptografar cartão de crédito
-
números, de modo que quando o utilizador swipes o número do cartão de crédito no ponto do
-
terminal de venda, principalmente no, você sabe, o dinheiro comerciantes registar. O dinheiro
-
registo, este é chamado o terminal de ponto de venda, vai em frente e criptografa o
-
número de cartão de crédito usando um pay-chave e está codificado toda a maneira até que ele vai
-
para o banco ou até mesmo além do que, talvez até todo o caminho quando se vai
-
para Visa. Agora, o problema é que estes números de cartão de crédito realmente passar através
-
muitos, muitos, muitos pontos de processamento. Todos eles esperar obter basicamente algo
-
que se parece com um número de cartão de crédito como um resultado. Então, se nós simplesmente queria criptografar
-
algo no ponto final, a um ponto final, e descodificar na outra extremidade
-
ponto, na verdade não é assim tão fácil, porque se tudo que fizemos foi criptografá-la utilizando AES,
-
, mesmo que apenas usou AES determinista. A saída do cartão de crédito encriptado
-
número seria 128 bloco bit. Dezasseis bytes que seria, que teria de ser
-
enviado a partir de um sistema para o outro, até que atinja o seu destino. Mas cada um dos
-
estes processadores, então, teria que ser mudado, porque eles estão todos esperando
-
obter números de cartão de crédito. E assim a questão é, podemos criptografar no dinheiro
-
registo, de modo que a criptografia resultante se parece com um cartão de crédito
-
número. E, como resultado, nenhum destes sistemas intermediários teria de ser
-
alterado. Apenas os pontos de extremidade teria de ser alterado. E ao fazê-lo seria
-
realmente obter end-to-end encryption sem ter que realmente mudar um monte de
-
software ao longo do caminho. Então a questão é, novamente, podemos ter esse mecanismo
-
chamado criptografia formato de preservação, onde a encriptação de um cartão de crédito próprio produz
-
algo que se parece com um cartão de crédito? Então é isso que eu Bolt-. O crédito criptografado
-
número do cartão deve se parecer com um número válido de cartão de crédito regular. Então este é o
-
objetivo de preservar o formato de criptografia. Mais abstratamente o que é que estamos tentando fazer,
-
é basicamente construir uma permutação pseudo-aleatório no ponto zero de S menos um
-
Para qualquer dado S. Assim, para o conjunto de números de cartão de crédito, S seria mais ou menos, você
-
saber, dois para o 42. Na verdade, ele vai ser, não exatamente dois para o 42. Vai
-
ser alguns números engraçadas que está em torno de dois a 42. E nosso objetivo é construir uma PRP
-
que funciona exactamente no intervalo, de zero a S menos um. E o que está dado como entrada
-
é, PRF. Digamos, algo como AES, que atua em blocos muito maiores, por exemplo, atua em
-
dezesseis blocos de bytes. Então, nós estamos tentando, de alguma forma, diminuir o domínio do
-
PRF para ajustá-la os dados que nos são dadas. E as perguntas é basicamente como
-
para fazer isso. Bem, uma vez que temos uma tal construção, podemos facilmente nos para
-
cartão encriptar números de crédito. O que faria é que a levaria a um crédito dado
-
número do cartão. Gostaríamos de codificá-lo de tal forma que agora ele é representado como um número entre
-
zero eo número total de números de cartão de crédito. Então, nós aplicamos a nossa PRP para que
-
seria criptografar este número de cartão de crédito, você sabe, usando o número dois da construção
-
o segmento de criptografia determinística. E então poderíamos mapear o número final de volta para
-
ser regular, para olhar como val, regular o número do cartão, de crédito válido e, em seguida, enviar
-
este ao longo do caminho. Então isso é como, isso é novamente criptografia expansão não. O
-
melhor que podemos fazer, como eu disse antes é criptografar usando um PRP, exceto novamente o
-
desafios técnicos que precisam de um PRP, que age sobre esse conjunto engraçado olhar especial
-
de zero a S-1 para esse valor pré determinado de S. Portanto, meu objetivo é mostrar-lhe como
-
para construir isso e uma vez vemos como fazê-lo, você também vai saber como criptografar
-
número de cartão de crédito de modo que o resultado em texto cifra é em si um cartão de crédito
-
número. Assim, as obras de construção em duas etapas. A primeira coisa que fazemos é diminuir
-
PRF nosso a partir do conjunto de 0,1 ao fim, digamos a zero um para o 128 e, no caso de
-
AES, duas 0,1 para o T, onde T é o mais próximo potência de dois para o valor S. Assim
-
palavra S é algum número louco em torno de dois a 41. T seria basicamente, em seguida, 42
-
porque essa é a potência mais próxima dos dois que está logo acima do valor de S. Assim, o
-
construção é basicamente vou usar o Ruby construção [inaudível]. O que usar
-
PRF F é primo. Que actua sobre os blocos de tamanho dois sobre dois. Então, imagine por exemplo
-
, no caso de cartão de crédito, t seria 42, porque dois dos 42 nós dissemos é o
-
próxima potência de dois que é maior do que, que, de s. S é o número de crédito,
-
número total de cartões de crédito. Então, vamos precisar de um PRF agora que atua em 21 byte
-
entradas. Portanto, uma forma de fazer isso é simplesmente tomar a cifra de bloco AES, tratá-lo como um
-
PRF em 128 entradas de bytes, e depois simplesmente truncar a saída para o mínimo
-
significativo de 21 bytes. Ok, então que nos foi dado um valor de byte 21. Gostaríamos de acrescentar
-
zeros a ele, para que cheguemos 128 bytes como resultado. Gostaríamos de aplicar AES para que e
-
então seria truncar volta para 21 bytes. Agora eu devo te dizer que isso é realmente
-
uma maneira simples de fazer isso, mas na verdade não é a melhor maneira de fazê-lo há
-
maneiras realmente melhores para truncar um PRF. Em n bits para ap, PRF em dois mais de dois bits.
-
Mas para os nossos fins, para efeitos deste segmento, o método de truncamento eu disse
-
é bom o suficiente. Então vamos usar esse método particular. Ok, então agora, nós temos
-
convertido nossa cifra de bloco AES em um PRF em dois mais de dois bits, digamos, em 21 bits. Mas
-
o que realmente queremos é uma PRP. E assim o que vamos fazer é que vamos ligar nossa nova PRF, F
-
privilegiada, diretamente na construção [inaudível]. Se você se lembra, este é
-
basicamente uma construção fiestal. Dizemos isso, quando falamos sobre DES. Somente
-
Luby-Rackoff usado três rodadas, e sabemos que este converte um PRF seguro em
-
uma PRP seguro em duas vezes o tamanho do bloco. Em outras palavras, começamos a partir de um PRF seguro
-
em 21 bits, e que nos dará e Luby-Rackoff nos dará uma PRF seguro em
-
42 bits, que é o que queríamos. Agora, devo dizer-lhe que os parâmetros de erro
-
na construção [inaudível] não são tão bons quanto poderiam ser. E, de fato, um
-
melhor coisa a fazer é usar sete rodadas de Fiestal. Em outras palavras, nós vamos fazer
-
este sete vezes cada vez que vamos usar uma chave diferente. Então você notar, aqui, estamos
-
usando apenas três teclas. Deveríamos estar usando deveríamos estar fazendo isso por sete vezes usando
-
sete chaves diferentes. E depois há um bom resultado, devido a [inaudível], que
-
mostra que a construção [inaudível], basicamente, tem como boa erro [inaudível]
-
termos como possível. Assim, os termos de erro no teorema de segurança vai ser basicamente dois
-
ao razoável T.. Portanto, agora temos uma permutação pseudo-aleatório que opera em estreita
-
potência de dois para o valor de S. Mas isso não é bom o suficiente. Nós realmente deseja obter um
-
pseudo-aleatório permutação no ponto zero de S menos um. Assim, dois passos nos levarão
-
para baixo de zero para o T, para o ponto zero real para o S menos um que nós somos
-
interessado polegadas E essa construção é, novamente, muito, muito bonito, então deixe-me mostrar
-
como ele funciona. Então, novamente, nós estamos dando esta PRP, que opera em uma potência de dois.
-
E nós queremos ir para baixo a um PRP, que opera em algo, um pouco menor.
-
Ok, então aqui está sobre as obras de construção. Basicamente, nós estamos dando entrada do X nos conjuntos
-
zero a S menos um que nós queremos. E o que vamos fazer é que vamos
-
reiterar o seguinte procedimento novamente e novamente. Então, primeiro de tudo, mapear X em
-
esta variável temporária Y. E agora estamos só vai criptografar a entrada X e colocar o
-
resultado em Y. Se Y está dentro do nosso conjunto de destino, paramos e mostramos Y. Se
-
novamente e novamente e novamente até que finalmente Y
-
cai em nosso conjunto de destino e que a saída desse valor. Assim, em uma imagem, deixe-me
-
explicar como isso funciona. Então, vamos começar de um ponto no nosso conjunto de destino. E agora, agora nós
-
aplicar o, E a função e nós pode ser mapeado para este ponto fora de nosso alvo
-
set, então nós não vamos parar. Então agora nós aplicamos a função E novamente, então poderíamos
-
ser mapeados para esse ponto e agora vamos aplicar a função E mais uma vez e agora tudo de uma
-
repente, mapear a este ponto, e então paramos, e que de saída do nosso. Ok, então
-
que? é como nós mapear pontos entre de zero a S menos um, para outros pontos do
-
zero a S menos um. Deve ser muito claro que esta é inversível. Para inverter,
-
tudo o que eu vou fazer é que eu só descriptografar e caminhada, de certa forma, na direção oposta. Assim
-
eu vou decifrar, e em seguida, descriptografar, e em seguida, descriptografar, até que finalmente, eu cai na
-
conjunto, de zero a S menos um. E isso me dá o inverso do ponto que eu queria
-
para. Portanto, este é, de fato, um PRP. A questão é se é uma PRP seguro, e
-
veremos que em apenas um minuto. Mas antes disso, deixe-me perguntar, quantas
-
iterações que você espera que vamos precisar? E eu quero lembrá-lo novamente, antes de
-
eu lhe fazer essa pergunta, que, de fato, S é menor que dois para o T. Mas é mais
-
do que dois para o T menos um. Assim, em particular, S é maior do que dois para o T
-
mais de dois. E a minha pergunta para vocês agora é quantas iterações que vamos precisar de
-
média. Até que esse processo converge. Portanto, a resposta é que nós vamos precisar de dois
-
iterações, então realmente apenas um pequeno número constante de iterações. E assim este
-
nos dará um mecanismo muito, muito eficiente, que vai nos mover para baixo de zero
-
um ao T para zero para o S-1. Agora, quando falamos de segurança, verifica-se
-
passo isso aqui é apertado. Em outras palavras, não há realmente nenhuma segurança adicional
-
custo para ir para baixo a partir de dois para o T para zero para S-1. E a razão que é verdade,
-
na verdade é novamente um teorema muito aguda para provar, mas eu, não vou fazê-lo aqui. Talvez
-
eu vou deixá-lo como um exercício para vocês para discutir. Que diz que se você me der
-
quaisquer dois conjuntos Y e X, em que Y está contido dentro de X, em seguida, aplicar a
-
transformação que acabamos de ver a uma permutação aleatória de X para X realmente
-
dá uma permutação aleatória de Y a Y. Então, isso significa que se começamos com uma verdadeira
-
permutação aleatória de X, você vai acabar com uma permutação verdadeiramente aleatória Y. E
-
desde, bem, a permutação estamos começando com é indistinguível
-
aleatória X, vamos acabar com uma permutação que é indistinguível
-
aleatória Y. Ok, então esta é uma construção muito apertado e como eu disse, o primeiro passo
-
realmente é, basicamente, a análise é a mesma que a análise de Lou Rockoff B.. Em
-
verdade, é melhor usar como eu disse, a análise Parthenon em sete rodadas. Assim
-
realmente aqui, há um pouco de custo em segurança. Mas, em geral, temos um
-
construção que é seguro para PRP efectivamente. Não tão boa segurança
-
parâmetros, mas, no entanto, este é um bom PRP seguro de que podemos construir a
-
realmente vai operar no intervalo de zero x menos um. Isto por sua vez vai permitir para
-
encriptar números de cartão de crédito, que o texto cifrado se parece com um cartão de crédito
-
número. E novamente, eu quero enfatizar que não há integridade aqui. O melhor
-
podemos conseguir aqui é apenas a segurança CPU determinística. No texto cifrado
-
, integridade e não aleatoriedade em tudo. Okay. Então isso conclui este módulo. E como
-
habitual quero apontar para um material de leitura de que você pode dar uma olhada se
-
você estiver interessado em aprender mais sobre tudo o que discutimos neste módulo.
-
Então, primeiro de tudo, a construção HKDF que falamos para a derivação de chave é
-
descrita em um artigo a partir de 2010 por Hugo Krawczyk. Criptografia determinístico, o
-
modo SIV que descrevemos é discutido neste artigo aqui. O modo que ENE
-
descrito que nos permite construir um, uma permutação [inaudível] pseudo-aleatório é
-
descrito neste artigo aqui por [inaudível]. Tweakable cifras de bloco que
-
realmente levou para o modo de operação XDS que é usado para criptografia de disco é
-
descrito neste artigo aqui. E, finalmente, um formato de criptografia reservando é descrito
-
neste último artigo que eu apontar para aqui. Ok então isso conclui este módulo.
-
E no próximo módulo vamos começar a olhar para como fazer troca de chaves.