Loading
Nota de Estudos
Study Reminders
Support
Text Version

Introdução à Segurança Computacional

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Fundamentos de CryptographyProf. Dr. Ashish Choudhury (Ex-) Infosys Foundation Career Development Chair ProfessorIndian Institute of Technology – BangaloreLecture – 6Introduction to Computational Security (Consulte o Tempo de Slide: 00 :31) Hello Todos, bem-vindos à palestra 6. O plano para esta palestra é o seguinte. Discutiremos sobre o nascimento da criptografia moderna, a saber, a abordagem que utilizamos na criptografia moderna. Discutiremos também sobre a noção de segurança computacional e os males necessários que estão associados à segurança computacional, e, finalmente, definiremos matematicamente o que queremos dizer com algoritmos eficientes e probabilidade insignificante. (Consulte o Tempo do slide: 00 :54) Então, apenas para relembrar no último par de palestras, discutimos sobre a noção de perfeito sigilo, o que é sempre desejável porque essa é a noção mais forte de sigilo que podemos alcançar. Porque o sigilo é alcançado contra um adversário que é computacionalmente ilimitado, cujo tempo de execução é ilimitado, mas também discutimos que temos que pagar um preço pesado para conseguir um sigilo perfeito, a saber, em qualquer processo de criptografia perfeitamente garantido, sua chave precisa ser tão maior quanto uma mensagem e cada instância da criptografia precisa usar uma chave fresca.Por isso, essas 2 restrições são meio impraticáveis, pois, na prática, visamos projetar um processo de criptografia onde podemos usar uma chave curta para criptografar mensagens longas e gostaríamos de ter um esquema de criptografia onde a mesma chave curta poderia ser usada para criptografar sequência de mensagens múltiplas. Isso significa que, praticamente, a criptografia perfeitamente segura não é simplesmente possível, isso é uma espécie de trapaça. Então, se alguém afirma que o seu processo de criptografia é prático, assim como lhe fornece um sigilo perfeito, então isso é uma trapaça clara. Isso nos leva à abordagem que a criptografia moderna segue. O princípio que seguimos na criptografia moderna é que, em vez de conseguir um sigilo perfeito, vamos tentar chegar o mais próximo possível do sigilo perfeito e, em troca, atingimos dois objetivos práticos que visamos. A saber, nós alcançamos um processo de criptografia onde podemos usar a mesma chave curta para criptografar várias mensagens. Então esse é o tipo de tradeoff que usamos na criptografia moderna. (Consulte o Tempo do slide: 02 :35) Então, vejamos a abordagem que utilizamos na criptografia moderna. Lembre-se, no modelo de sigilo perfeito, nosso adversário é computacionalmente ilimitado e um objetivo de sigilo no modelo de perfeito sigilo é que queremos garantir que o adversário não aprenda absolutamente nada sobre o texto simples e então formalizamos rigorosamente essa noção: o que queremos dizer com adversário não aprende absolutamente nada sobre texto simples? Discutimos também que as consequências desse objetivo, a saber, o objetivo de conseguir que adversário aprenda absolutamente nada é que você tem que ter uma chave tão grande quanto o texto simples e não pode se dar ao luxo de reutilizar a chave. Então, essas foram as consequências ou as restrições do sigilo perfeito. (Consulte o Tempo do slide: 03 :33) Agora, as mudanças que vamos fazer na criptografia moderna é a seguinte: em vez de assumir que nosso adversário é computacionalmente ilimitado ou computacionalmente ilimitado, supomos que nosso adversário seja computacionalmente delimitado técnicas, isso significa que não vamos mais supor que o adversário poderia executar seu algoritmo por quebrar o esquema ou atacar o esquema por um período ilimitado de tempo. Veremos como matematicamente formulamos essa noção de adversário computacionalmente delimitado. O segundo relaxamento que vamos fazer no modelo de sigilo perfeito é que em vez de exigir que adversário não aprenda absolutamente nada sobre o texto à plaina, nós diremos para alcançar o seguinte objetivo: nós diremos a alcançar que o adversário deve aprender informações adicionais sobre o texto à plaina com uma probabilidade insignificante. Isso significa que agora estamos dispostos a deixar adversário aprender algo sobre o texto à plaina, mas isso é informação adicional ou a probabilidade com a qual o adversário poderia aprender as informações adicionais é tão pequena, é tão insignificante que para quase todos os fins práticos podemos ignorar. (Consulte o Slide Time: 04 :42) Assim que fazemos estas duas flexibilizações e o modelo de perfeito sigilo, devemos esperar que devemos obter as duas implicações a seguir, a saber, o nosso processo de criptografia deve estar usando chave curta e a mesma chave curta deve ser utilizável para criptografar uma sequência de mensagens. Acontece que de fato se tornamos essas duas flexibilizações no modelo de perfeito sigilo, podemos atingir os dois objetivos desejados, a saber, a mesma chave curta pode ser usada para criptografar sequência de mensagens longas e é isso que a abordagem de criptografia moderna utiliza. A noção de sigilo que obtemos fazendo essas duas flexibilizações é o que chamamos de sigilo computacional, pois a segurança é alcanada contra um adversário cujo poder computacional é agora limitado, em vez de dizer que o poder de computação adversarial é ilimitado. Então, essa é a abordagem que vamos seguir na criptografia moderna. (Consulte o Tempo do slide: 05 :38) Assim, as duas flexibilizações que vamos fazer é agora objetivamos alcançar a segurança apenas contra adversários eficientes, e o que eu quero dizer por adversário eficiente é informalmente aqueles algoritmos ou aqueles algoritmos adversários cujo tempo de execução é prático ou cujo tempo de execução que leva um tempo que é viável em prática. Vamos matematicamente definir o que exatamente significamos por adversários eficientes muito em breve. O segundo relaxamento que vamos agora fazer é supor que os adversários permitiam quebrar o esquema com alguma probabilidade, mas a probabilidade com a qual o adversário pode quebrar o esquema é tão pequena que não nos incomodamos com uma probabilidade tão pequena. Novamente, vamos muito em breve matematicamente e rigorosamente definir o que exatamente nós queremos dizer com tal probabilidade de erro tão pequena. Aliás, como veremos durante o curso, como prossegue o curso, que sob certa suposição o tempo que o adversário exigirá para quebrar o esquema com essa pequena probabilidade será de ordem de poucas vidas. Isto em contraste com o que alcançamos em perfeito sigilo. Em perfeito sigilo, mesmo que darmos tempo ilimitado ao adversário, há probabilidade absolutamente zero de que ele aprenda algo sobre texto simples subjacente. Mas na segurança computacional, em modelo de segurança computacional onde nosso objetivo é alcançar a reusabilidade chave se damos enorme quantidade de tempo para o adversário, então há uma chance de que o adversário possa aprender algo sobre a mensagem subjacente, mas que algo vai ser tão pequeno que para a maioria dos propósitos práticos, podemos ignorá-lo. Além disso, a quantidade de tempo que vai exigir para o adversário aprender a mensagem, é a alguns que uma pequena probabilidade que será de ordem de poucas vidas. Acontece que isso é aceitável para a maioria das aplicações práticas porque na maioria das aplicações práticas, não exigimos segurança eterna. O que eu quero dizer com esta última afirmação é o seguinte: imagine que você quer ter um sistema seguro para manter o sigilo dos seus detalhes do cartão de crédito. Por isso, se eu tiver um processo de criptografia, o que garante que preservará a privacidade dos seus detalhes do cartão de crédito, com quantidade significativa de probabilidade. Isso significa a probabilidade de que o adversário possa aprender os seus detalhes do cartão de crédito, olhando para a criptografia dos seus detalhes do cartão de crédito com muito, probabilidade muito pequena e a quantidade de tempo que o adversário levará para aprender sobre seus detalhes do cartão de crédito é de ordem digamos 35 anos ou 40 anos, então está tudo bem porque, idealmente, você vai exigir que o sigilo dos seus detalhes do cartão de crédito seja mantido apenas por poucos anos. Você não exige o sigilo, ou a privacidade de seus detalhes do cartão de crédito para ser mantida para sempre duradoura. Então isso é aceitável. Como se revelará que acima de duas relaxações que estamos fazendo no modelo de sigilo computacional é absolutamente necessário se o nosso objetivo final é alcançar a reusabilidade chave. A saber, no próximo casal de slides, vamos discutir que realmente se quisermos projetar o processo de criptografia onde nosso objetivo é garantir que a mesma tecla curta seja usada para criptografar várias mensagens, então definitivamente precisamos fazer as duas relaxações que estou discutindo aqui, ou seja, o primeiro relaxamento é que devemos estar dispostos a deixar o adversário aprender algo sobre a mensagem subjacente com uma pequena probabilidade e um segundo relaxamento é que devemos destinar a segurança apenas contra adversários eficientes. (Consulte o Tempo do slide: 09 :16) Vamos ver a necessidade dessas duas relaxações. Ou seja, o primeiro relaxamento é que agora devemos destinar a segurança apenas contra adversários eficientes. Então, para ver que por que esse relaxamento é necessário, considere um processo arbitrário de criptografia, em que você vai usar a mesma chave para criptografar sequência de mensagens e a saber, a mesma chave vai ser usada para criptografar várias mensagens. E imagine que estamos no modelo de ataque conhecido modelo de ataque (KPA). Só para relembrar, no modelo de ataque do KPA, assumimos que o adversário vê criptografas de várias mensagens, e significa que sabe tanto as mensagens subjacentes quanto suas criptografias sob uma chave desconhecida, onde a mesma chave vai ser retida para criptografar as novas mensagens. Imagine que eu tenho um processo arbitrário de criptografia enquanto diz que o remetente tem mensagens m1, m2. ..., mt e os textos cifrados resultantes são C1, C2, ..., Ct e adversário tem acesso a este (texto simples, texto cifrado). Sabe-se que cada um dos textos cifrados em cada um desses pares tem a criptografia do texto simples correspondente sob alguma chave desconhecida k, que a chave não é conhecida do atacante. O adversário também sabe a descrição do processo de criptografia e também sabe que a mesma chave desconhecida k vai ser retida pelo remetente para criptografar próxima sequência de mensagens. Assim, sob esse cenário, o adversário pode sempre correr o que chamamos como o ataque de key-recovery brute-force. Ideia por trás desse ataque de key-recovery de força bruta é que o que o adversário pode fazer é, já que sabe a descrição do espaço chave, ele pode tentar por cada chave candidata k pertencer ao espaço chave e descriptografar cada um dos textos cifrados em seus pares de (??,??) e ver que existe uma chave candidata k ∈? cada um dos?? em seus pares de (??,??) decriptografar de volta para o texto simples correspondente sob essa chave de candidato k?Se ele pudesse, definitivamente existe alguma chave candidata k e assim que acertar naquela chave de candidato k, pode descobrir qual é a chave que o remetente vai usar para criptografar a próxima sequência de mensagens. Então você pode ver que a probabilidade de sucesso desse ataque de key?recovery de força bruta é uma porque para alguns k ∈?, tal que para o Deck (?? ): = ??, para cada um (??,?? ), o tempo de execução deste algoritmo de key-recovery brute-force é? (|? |). Se assumirmos que o nosso espaço chave é significativamente grande para nós, por exemplo, imagine que o espaço chave é o conjunto de todas as possíveis 256-bit cordas possíveis. Isso significa imaginar que meu espaço chave é 2256. Agora essa força bruta acabou |? | = 2256 vai levar enorme quantidade de tempo, isso é meio imprático. Isso significa que se eu fizer o relaxamento que não vou tolerar ou não estou incomodado com os adversários cujo tempo de execução é impraticável, então esse ataque de recuperação de força bruta não será considerado como um ataque no meu modelo de ataque. Então, essa é a necessidade do primeiro relaxamento se o seu objetivo é alcançar um esquema de criptografia, onde a mesma chave vai ser usada para criptografar várias mensagens. Isso nos mostra a necessidade do primeiro relaxamento. (Consulte o Slide Time: 12 :54) Agora vamos ver a necessidade do segundo relaxamento se o seu objetivo é alcançar a reusabilidade chave. O segundo relaxamento é que você deve permitir que o esquema seja quebrado com uma pequena probabilidade. Novamente, considere uma instância de um processo arbitrário de criptografia em que a mesma chave k tenha sido usada para criptografar várias mensagens em sequência e dizer que o adversário está no modelo de ataque KPA, onde ele tem acesso a vários (??,??) pares e a chave não é conhecida do adversário. Mas o adversário conhece o texto cifrado correspondente ou as criptografias do texto simples correspondente em cada um dos pares, e o adversário sabe que a mesma chave desconhecida k vai ser retida pelo remetente para criptografar a próxima sequência de mensagem. Agora, adversário pode sempre lançar o que chamamos isso como um ataque de adivinhação. A ideia por trás de um ataque de adivinhação é adversário pode simplesmente obter um valor de candidato de chave, dizer k do espaço chave e verificar se aquela chave candidata que ele adivinhou é realmente a chave certa ou não realizando a seguinte operação: adivinhe aleatoriamente um k ∈?, e confira se Deck (?? ): = ??,, para cada um (??,?? ), então ele bateu na tecla certa. Agora, qual é a probabilidade de sucesso deste ataque? A probabilidade de sucesso deste ataque é de 1 / |? |. Qual é o tempo de execução do ataque ou o algoritmo do atacante ’? O tempo de execução do algoritmo do adversário ’ s é? (| 1 |) porque ele agora não está fazendo brute-força sobre o espaço chave, heis apenas adivinhando o valor da chave candidata.Por isso, novamente, se eu assumir que meu espaço chave é extremamente grande, isso significa imaginar novamente para o momento que o seu espaço chave se ordenar 2256, então a probabilidade de sucesso desse ataque é de 1/2256, o que é muito, muito pequeno. Isso significa que apesar de o adversário ter a chance de quebrar o esquema, a saber, aprender a chave, a chance de que ele possa aprender a chave é tão pequena que, a saber, é 1/2256 que podemos ignorá-lo para a maior parte dos propósitos práticos. Então, isso volta a demonstrar que se a reusabilidade chave é o seu objetivo final, então temos que fazer o segundo relaxamento em nosso modelo, a saber, devemos estar dispostos a deixar o adversário quebrar o esquema com uma probabilidade menor e que é tão pequena que podemos ignorá-lo. (Consulte o Tempo do slide: 15 :19) Então, apenas para resumir os dois males necessários que estão associados ao nosso objetivo final de reusabilidade chave são os seguintes. Há dois ataques possíveis, dois ataques extremas que podem sempre ser lançados contra um esquema arbitrário onde a reusabilidade chave é o objetivo final. O primeiro ataque é o ataque de key-recovery de força bruta, cujo tempo de execução é muito grande, mas a probabilidade de sucesso é de 100%. Há o segundo ataque extremo contra tal esquema em que a reusabilidade chave é o objetivo, onde o tempo de rodagem do atacante é muito menor, é constante, mas a probabilidade de sucesso do atacante é muito pequena, é tão pequena que para a maioria dos propósitos práticos podemos ignorar. Então agora se você ver que se fazemos as duas relaxações que venho falando, a saber, o primeiro relaxamento onde direcionamos para alcançar o sigilo apenas contra adversários eficientes, então o ataque de força bruta não seria considerado como um ataque em nosso modelo de ataque porque como eu disse, a complexidade temporal da recuperação da força bruta ataque será enormemente grande. Se eu fizer o segundo relaxamento, a saber, onde estou disposto a deixar o adversário aprender ou quebrar o esquema com uma probabilidade de erro muito pequena, então o segundo ataque, a saber, o ataque de recuperação de chave não seria considerado como um ataque em nosso modelo de ataque. (Consulte o Slide Time: 16 :42) Portanto, este é o resumo dos dois males necessários que estão associados a qualquer processo de criptografia, onde a reusabilidade chave é o objetivo. O primeiro relaxamento que você deve fazer em seu modelo é em vez de mirar a segurança contra um adversário computacionalmente ilimitado, você deve destinar o sigilo apenas contra adversários computacionalmente eficientes. E o segundo relaxamento que você deve fazer em seu modelo é em vez de exigir que absolutamente nada sobre o plaintexto subjacente deva ser revelado, você deve estar disposto a deixar o adversário aprender algo sobre o plaina subjacente com alguma pequena probabilidade de erro e essa probabilidade deve ser tão pequena que para a maioria dos propósitos práticos, você pode ignorá-lo desligado. Agora, os desafios como exatamente nós matematicamente definimos adversários eficientes, a saber, quais algoritmos, que o algoritmo contraditório, o que você pode dizer é um algoritmo contraditório eficiente? O segundo desafio aqui é qual quantidades você vai definir, ou você chamará como uma pequena quantidade ou uma pequena probabilidade de erro. Então, o que nós vamos fazer aqui é vamos matematicamente definir esses dois termos em notação assintótica. (Consulte o Tempo do slide: 17 :53) Então, pessoas que estão familiarizadas com o conceito de algoritmos, saberão o que exatamente nós queremos dizer por notação assintótica. Por isso, quando eu quero medir o tempo de execução de um algoritmo, há duas abordagens pelas quais podemos medir o tempo de execução do algoritmo. Uma é a abordagem concreta, em que comparamos dois algoritmos para o mesmo objetivo, com base no tempo exato de execução. Então, você tem dizer, algoritmo 1 algoritmo 2 para uma tarefa. Você executa o algoritmo 1 em amostras de vários tamanhos, você executa algoritmo 2 em amostras de vários tamanhos e então você compara os timings exatos do algoritmo 1 e algoritmo 2, é claro sobre qual processador você é dado e assim por diante. Com base nisso, você compara se o algoritmo 1 é melhor? ou algoritmo 2 é melhor? Mas a queda dessa abordagem é mesmo que você obtenha a comparação concreta do algoritmo 1 versus algoritmo 2, esta abordagem não leva em consideração a velocidade de computação subjacente, o progresso na velocidade da computação e assim por diante. A segunda abordagem que seguimos no mundo dos algoritmos para comparar 2 algoritmos é a notação assintótica, em que comparamos o tempo de execução dos 2 algoritmos para solução da mesma tarefa em notações assintóticas, a saber, em notação grande O notação. Comparamos o tempo de execução medindo o número de etapas básicas do algoritmo 1 e o número de etapas básicas que o algoritmo 2 onde o número de etapas básicas é computado como uma função do tamanho de entrada. Dependendo de qual algoritmo leva menos número de etapas, definimos se o algoritmo 1 é melhor? ou algoritmo 2 é melhor? Você tem várias notações assintóticas como big O notation, theta notation, omega notação baseada na qual você pode comparar 2 algoritmos. Assim, quando queremos definir o que entendemos por eficiente, algoritmo insignificante probabilidade insignificante no contexto da criptografia, vamos seguir esta última abordagem, nomeadamente, vamos definir estes termos assiptoticamente. Por definir estes termos assiptoticamente, temos que introduzir algo do que chamamos de parâmetro de segurança que denotamos por n. A razão pela qual queremos introduzir este parâmetro de segurança é que uma vez introduzimos o parâmetro de segurança n, então todos os três quantitiesnomeadamente o tempo de execução dos utilizadores, o tempo de execução do algoritmo de geração de chaves, o tempo de execução do algoritmo de criptografia, o tempo de execução do algoritmo de decriptografia. Da mesma forma, o tempo de execução do algoritmo adversarial do atacante, e a probabilidade de sucesso do atacante, todos vão ser expressos em função do parâmetro de segurança. Geralmente, no contexto do processo de criptografia de chave simétrica, o parâmetro de segurança é o tamanho da chave secreta, que geralmente é para a maioria dos propósitos práticos é 128, 256, e assim por diante. (Consulte o Tempo do slide: 20 :41) Então, vamos primeiro definir o que queremos dizer com algoritmos eficientes assiptoticamente. Informalmente, dizemos que um algoritmo é eficiente se o seu tempo de execução é alguma função polinomial do parâmetro de segurança. A Saber, Algoritmo? tem um tempo de execução polinomial, se existe um polinômio? (.), tal para cada entrada? ∈ {0, 1} ∗, o cálculo de? (?) finaliza dentro? (|? |) etapas, onde |? | denota o comprimento da string? .Se for esse o caso, então dizemos que o nosso algoritmo A tem tempo de execução polinomial e chamaremos nosso algoritmo A para ser um algoritmo eficiente. Considerando que, se não podemos vincular o tempo de execução do nosso algoritmo A por alguma função polinomial no tamanho de sua entrada, dizemos então que o nosso algoritmo não é eficiente. Essa é a definição de algoritmo eficiente. Agora, uma vez que definimos uma noção de algoritmo eficiente, a exigência que colocamos em qualquer cifra é a seguinte: lembre-se de que temos o requisito de correção, temos a exigência de privacidade, e além disso temos agora o terceiro requisito de qualquer processo de criptografia. O novo requisito é que o tempo de execução do algoritmo de geração de chaves, algoritmo de criptografia e algoritmo de decriptografia deve ser alguma função polinomial deste parâmetro de segurança n. Se o tempo de execução não for uma função polinomial, então não consideraríamos que algoritmo ou cifra para ser uma cifra eficiente. (Consulte o Tempo do slide: 22 :15) Agora, vamos definir a noção de probabilidade insignificante como uma função do parâmetro de segurança. Assim informalmente, dizemos que uma função do parâmetro de segurança é insignificante se torna-se quase 0as o valor do seu parâmetro de segurança n tende ao infinito ou a função do parâmetro de segurança será chamada como uma função insignificante se for assiptoticamente menor do que o inverso de cada function.Namely, se f (n) é uma função, então, vamos dizer que f (n) é uma função insignificante se para cada função polinomial p (n), existe algum valor de n, a saber, N, tal que f (n) é estritamente inferior ao inverso da função polinomial p (n) para todos os valores de n > N. Se isto se mantém, então dizemos que o nosso função f (n) é uma função insignificante. Outra definição equivalente a essa função insignificante é para cada constante?, existe alguma?, tal que? (?) <? (−?), para todos? >?, então dizemos que a nossa função f (n) é uma função insignificante. A razão pela qual essas 2 definições são equivalentes é que qualquer funcionalismo polinomial (n), você pode sempre escrevê-lo como algum nc. Então, se f (n) é estritamente inferior ao inverso da função polinomial para cada função polinomial, então eu posso reescretá-lo como? (?) <? (−?) para cada c.I. constante, você pode usar qualquer uma dessas duas definições para provar ou desmentir se uma determinada função f (n) é uma função insignificante em n ou não. Então, aqui, exemplo algumas funções que são todas as funções insignificantes. Cada uma das funções é estritamente inferior ao inverso de cada função polinomial, em que o valor de N é diferente para as funções polinomiais correspondentes. Portanto, apesar de todas essas funções serem funções insignificantes, a saber, se eu continuar fazendo o valor do pequeno n ser grande e como n tende ao infinito, cada uma dessas funções candidatas se tornará zero eventualmente. No entanto, a taxa em que cada uma dessas funções se aproxima a zero é diferente. Então, por exemplo se eu considerar a função 2-nand se eu considerar a segunda função, então definitivamente o 2-n abordará o valor zero mais rápido em comparação com o valor da função e assim por diante. Por outro lado, se eu considerar a função 1 /n10, então ela não é uma função insignificante. Como a exigência a partir de uma função insignificante é que a função deve ser estritamente inferior à inversa de cada função polinomial, mas você pode facilmente ver que, para nenhum valor de n, a função, isso não é possível para cada valor de n. Como resultado, ele viola a definição de probabilidade insignificante. (Consulte o Slide Time: 25 :34) Então, definimos matematicamente o que queremos dizer por algoritmo eficiente e definimos qual probabilidade você pode considerar como uma pequena probabilidade. Por isso, agora a família de funções insignificantes e polinomiais satisfazem algumas simpáicas propriedades de fechamento. Vejamos as propriedades de encerramento satisfeitas pela classe de funções polinomiais. Portanto, se considerar funções polinomiais twoarbitrais, diga-se P1 (n) e P2 (n),, assim como são funções polinomiais Qual é a implicação da primeira propriedade de encerramento? Diz que suponhamos que se você tem dois subroutines a maneira de interpretar a primeira propriedade de encerramento é a seguinte: imagine que você tem duas subroutines, onde o tempo de execução da primeira subroutine é alguma função polinomial em n e o tempo de execução do segundo procedimento também é alguma função polinomial em n, e se você tiver uma rotina maior, que realmente chama isso de sub procedimentos em sequência, então o tempo de execução do algoritmo maior também vai ser um funcionalismo polinomial s.Namely, um algoritmo maior que faz com que essas duas funções menores em sequência também vá ser considerado como eficiente algoritmo. É isso que é a interpretação da primeira propriedade de encerramento. Só para resumir, nesta palestra, discutimos que se a reusabilidade chave é o nosso objetivo final, a saber, se queremos projetar um esquema em que queremos reter a mesma chave para criptografar várias mensagens, então temos que fazer para flexibilizar o modelo de sigilo perfeito.O primeiro relaxamento que temos que fazer é que, em vez de assumir que nosso adversário é computacionalmente ilimitado, temos que assumir que nosso adversário é computacionalmente delimitado e vimos também que o que queremos dizer, como medir se o tempo adversário ’ s é computacionalmente delimitado ou não. Da mesma forma, o segundo relaxamento que temos que fazer em nosso modelo é em vez de dizer que adversário não deve aprender absolutamente nada sobre a mensagem subjacente, devemos dar alguma chance ao adversário de quebrar o seu esquema. Que alguma chance de quebrar o esquema deve ser tão pequena que para a maioria dos propósitos práticos podemos ignorá-lo. Então, nós também vimos como matematicamente definir uma probabilidade tão pequena de adversário quebrando o esquema. Vimos que essas duas relaxações são meio que males necessários para qualquer esquema de criptografia onde o objetivo é alcançar a reusabilidade chave. Porque se não fizer destas duas flexibilizações, então há sempre ataques 2extreme que são possíveis, nomeadamente o ataque de adivinhação e um ataque de força bruta. A probabilidade de sucesso do ataque de adivinhação será muito, muito pequena, mas o tempo de rodação deste ataque de adivinhação será prático, enquanto que a probabilidade de sucesso do ataque da força bruta será de 100% mas o tempo de rodação do ataque da força bruta será extremamente grande. Então, nós temos que definitivamente fazer essas duas relaxações. Espero que tenha gostado desta palestra. Obrigado.