Algoritmos assíncronos e paralelos no kernel do Linux

4

Na configuração do kernel do Linux, vejo estas opções:

config CRYPTO_PCRYPT
        tristate "Parallel crypto engine"
        depends on SMP
        select PADATA
        select CRYPTO_MANAGER
        select CRYPTO_AEAD
        help
          This converts an arbitrary crypto algorithm into a parallel
          algorithm that executes in kernel threads.

config CRYPTO_CRYPTD
        tristate "Software async crypto daemon"
        select CRYPTO_BLKCIPHER
        select CRYPTO_HASH
        select CRYPTO_MANAGER
        select CRYPTO_WORKQUEUE
        help
          This is a generic software asynchronous crypto daemon that
          converts an arbitrary synchronous software crypto algorithm
          into an asynchronous algorithm that executes in a kernel thread.

Qual é a diferença entre algoritmos arbitrários, algoritmos assíncronos e algoritmos paralelos em criptografia?

    
por Devyn Collier Johnson 27.11.2013 / 11:27

1 resposta

6
  • Na execução síncrona , você espera que a tarefa seja concluída antes de passar para outra tarefa.
  • Na execução assíncrona , você pode passar para outra tarefa antes que a anterior seja concluída.

Esses termos não estão especificamente relacionados à criptografia. Em geral, descrições de livro-texto de algoritmos de criptografia não são síncronas nem assíncronas, mas as implementações do algoritmo também podem ser.

Considere, por exemplo, uma descrição de alto nível de AES :

AES é uma cifra de bloco, então cada bloco de entrada de 128 bits passa pelas seguintes transformações:

  • KeyExpansion
  • InitialRound
    • AddRoundKey
  • Rounds (10, 12 ou 14 ciclos de repetição, dependendo do tamanho da chave)
    • SubBytes
    • ShiftRow
    • MixColumns
    • AddRoundKey
  • Rodada final
    • SubBytes
    • ShiftRows
    • AddRoundKey

Dependendo do modo de cifra usado, a criptografia dos blocos pode ser dependente ou independente. Por exemplo, na criptografia no modo Cipher-block chaining (CBC), o texto cifrado do bloco anterior é usado para transformar o texto simples do próximo bloco antes das transformações reais do AES. Neste caso, a implementação do algoritmo deve ser síncrona, pois a saída do passo anterior é necessária como entrada para o próximo.

Por outro lado, no modo de livro de códigos eletrônico (ECB), cada bloco é criptografado separadamente. Isso significa que a implementação do algoritmo pode ser síncrona como antes ou assíncrona, em cujo caso as criptografias do próximo bloco podem começar mesmo enquanto as rodadas AES para os blocos anteriores estão em andamento.

Em nosso exemplo, a execução pode seguir threads de execução separados para cada bloco ou < href="http://en.wikipedia.org/wiki/Pipeline_%28computing%29"> pipelined , ou seja, o algoritmo é dividido em várias partes independentes. Por exemplo, a rodada inicial para o próximo bloco pode ser realizada enquanto as repetições arredondadas para o bloco anterior estão em andamento. Pipelining é uma técnica comum em implementações de criptografia de hardware.

O módulo cryptd é um modelo que usa um algoritmo de criptografia de software síncrono e o converte em um assíncrono, executando-o em um encadeamento do kernel.

A execução concorrente do algoritmo assíncrono pode ser > intercalado , por exemplo o algoritmo é executado em um único núcleo da CPU e alterna entre as operações nos dois blocos ou paralelo , por exemplo a execução do algoritmo prossegue simultaneamente em múltiplos núcleos, cada núcleo processando um bloco próprio.

A pcrypt criptografia paralela template pega um algoritmo de criptografia e o converte para processar as transformações de criptografia em paralelo.

Acho que arbitrário nesses casos se refere apenas a que a arquitetura dos módulos é geral o suficiente para ser aplicada a qualquer algoritmo criptográfico. Acredito que, por enquanto, apenas os algoritmos AEAD são suportados por pcrypt .

    
por 28.11.2013 / 10:20