Uso prático de ecryptfs, chaves criptografadas e TPM: como converter a chave de usuário existente em chave criptografada?

1

A versão resumida desta pergunta é: Como faço para converter uma chave de usuário no chaveiro do kernel? armazenar o token de autenticação ecryptfs / FEFEK em uma chave criptografada no chaveiro? (Por exemplo, como adicionar uma chave criptografada com dados de texto simples especificados pelo usuário, de uma chave gerada aleatoriamente - como uma senha de montagem preexistente para um sistema de arquivos ecryptfs existente.) Leia sobre o porquê ...

Estou tentando descobrir como usar praticamente o ecryptfs com um TPM e A informação que estou achando é geralmente desatualizada / obsoleta. Tudo que eu encontrei é artigos de blog ou white papers da IBM de alguns anos atrás que parecem usar recursos que não existem mais / recursos não-mantidos (o módulo TSPI removido e a biblioteca OpenSSL TPM que parece não-mantida e não está mais no meu gerenciador de pacotes). Eu juntei isso a maneira correta de fazer isso agora envolve chaves kernel confiáveis e criptografadas, como por:

A estratégia descrita na documentação acima indica que a ideia seria criar uma nova chave confiável, selada com o TPM e usá-la para criar uma nova chave criptografada no formato ecryptfs, especificando a chave confiável como o mestre. Isso é fácil de seguir e faz o que eu estou procurando, exceto ...

O problema é que, se o TPM morrer, preciso recuperar meus dados (por exemplo, dados do computador, e precisa restaurar a partir de backups criptografados). O que eu estou querendo fazer é usar um senha para descriptografar dados se o TPM não estiver disponível, para ser usado somente circunstâncias especiais. Como alternativa, os usuários podem ter um sistema de arquivos ecryptfs com uma senha de montagem / FEFEK já escolhida - por exemplo você não deseja criptografar novamente todos os seus arquivos apenas para usar o TPM. Isto parece como uma necessidade óbvia, ainda tenho dificuldade em descobrir o "como".

Da documentação acima:

The data structure defined by eCryptfs to contain information required for the
FEK decryption is called authentication token and, currently, can be stored in a
kernel key of the 'user' type, inserted in the user's session specific keyring
by the userspace utility 'mount.ecryptfs' shipped with the package
'ecryptfs-utils'.

Encrypted keys of the newly introduced [ecryptfs encrypted] format store an
authentication token in its payload with a FEFEK randomly generated by the
kernel and protected by the parent master key.  [What if I want to use an
existing FEFEK?]

OK, então parece que o kernel está armazenando a chave criptografada no mesmo formatar como uma chave de usuário comum que seria adicionada ao chaveiro pelo ecryptfs ferramentas do espaço do usuário (por exemplo, por ecryptfs-add-passphrase ou o auxiliar de montagem). Isso é, a carga útil da chave de usuário e a chave criptografada são basicamente um e o mesmo, exceto que o kernel não permitirá que o espaço do usuário leia a chave criptografada formato não criptografado. Certo?

Então, eu acho que o que eu quero fazer é isso - estou no caminho certo aqui?

  1. Use ecryptfs-add-passphrase para adicionar uma senha de montagem ao chaveiro. (Pode ser uma senha de montagem para um sistema de arquivos ecryptf existente). Agora eu tenho uma chave de usuário no chaveiro armazenando uma autenticação ecryptfs símbolo. A senha de montagem pode ser complexa e armazenada off-line local seguro, talvez protegido por ecryptfs-wrap-passphrase , e somente usado em um cenário de recuperação de dados (por exemplo, se o TPM estiver em alta).
  2. Crie uma nova chave confiável no chaveiro, conforme a documentação do kernel acima.
  3. Converta a chave de usuário existente armazenando o token de autenticação de ecrypt-add-passphrase na etapa 1 em uma chave criptografada no chaveiro, usando a chave confiável como a chave mestra. ( É aqui que estou preso. )
  4. Remova a chave do usuário do chaveiro, já que não precisamos mais dela.
  5. Use keyctl pipe para salvar a chave criptografada em um arquivo em disco para mais tarde montagem.

A montagem cotidiana comum funcionaria como:

  1. Carregue e desative a chave confiável no chaveiro.
  2. Carregar blob de chave criptografada da etapa 5 acima em chave criptografada no chaveiro usando chave confiável como chave mestra.
  3. Monte usando a chave criptografada da etapa anterior.

Se o TPM for destruído ou perdido:

  1. Use ecryptfs-add-passphrase para adicionar a senha de montagem do backup em um token de autenticação armazenado em uma chave do usuário.
  2. Monte usando essa chave de usuário.

Então, minha pergunta principal é esta: : Como faço para converter uma chave de usuário armazenando a autenticação token para uma chave criptografada, como na etapa 3 no procedimento de configuração acima? Para Por exemplo, os documentos do kernel dizem isso para descriptografar uma chave criptografada existente exportada anteriormente com o canal keyctl:

keyctl add encrypted name "load hex_blob" ring

Mas eu quero fazer algo assim para criar uma nova chave criptografada de algum texto plano pré-existente:

keyctl add encrypted name "load ecryptfs trusted:masterkey 'keyctl print <id of user key holding plaintext authentication token / FEFEK / mounting passphrase>'" @u

(Isto em oposição à nova chave aleatória gerada com add encrypted name "new ecryptfs" )

Se o acima não for possível, então o que me falta na minha estratégia? Parece Estou perdendo algumas informações óbvias aqui.

    
por James Johnston 27.03.2016 / 19:29

0 respostas