AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 746513
Accepted
Philipp Claßen
Philipp Claßen
Asked: 2023-05-21 15:36:55 +0800 CST2023-05-21 15:36:55 +0800 CST 2023-05-21 15:36:55 +0800 CST

cryptsetup: a verificação no luksOpen é não determinística ao ler a senha de um arquivo

  • 772

Estou depurando um comportamento estranho do cryptsetup:

Suponha que a senha correta esteja armazenada no arquivo pw. Eu esperava agora que --test-passphrasesempre teria sucesso (ou seja, não imprimindo nenhuma saída) se fosse passado como stdin. Mas acontece que ele falha aleatoriamente:

# cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2 < pw
# cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2 < pw
No key available with this passphrase.
# cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2 < pw
# cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2 < pw
No key available with this passphrase.
# cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2 < pw
# cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2 < pw
No key available with this passphrase.
# cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2 < pw
# cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2 < pw
# cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2 < pw
No key available with this passphrase.

Percebi isso, pois falho constantemente várias vezes para desbloquear minha partição na inicialização (no GRUB). Primeiro, pensei que estava digitando errado, mas agora tenho a impressão de que pode ser um bug no cryptsetup. Também não consigo desbloqueá-lo consistentemente mais tarde (não no GRUB), mesmo se estiver copiando e colando a senha correta.

Observe que também difere quando passo por esta maneira (principalmente equivalente):

# cat pw | cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2
No key available with this passphrase.
# cat pw | cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2
No key available with this passphrase.
# cat pw | cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2
# cat pw | cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2
No key available with this passphrase.
# cat pw | cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2
No key available with this passphrase.
# cat pw | cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2
No key available with this passphrase.

Aqui, todas as tentativas falharam, exceto uma. Enquanto a outra abordagem é bem-sucedida com mais frequência. Esse comportamento é reproduzível para mim: sempre falha com mais frequência.

# cryptsetup --version
cryptsetup 2.6.1 flags: UDEV BLKID KEYRING KERNEL_CAPI

# cryptsetup luksDump /dev/nvme0n1p2
LUKS header information
Version:        2
Epoch:          5
Metadata area:  16384 [bytes]
Keyslots area:  16744448 [bytes]
UUID:           2372e472-ef96-428f-b971-f68fb0c35b63
Label:          (no label)
Subsystem:      (no subsystem)
Flags:          (no flags)

Data segments:
  0: crypt
    offset: 16777216 [bytes]
    length: (whole device)
    cipher: aes-xts-plain64
    sector: 512 [bytes]

Keyslots:
  0: luks2
    Key:        512 bits
    Priority:   normal
    Cipher:     aes-xts-plain64
    Cipher key: 512 bits
    PBKDF:      argon2id
    Time cost:  13
    Memory:     1048576
    Threads:    4
    Salt:       ea b0 88 ... 
                f3 f9 72 ... 
    AF stripes: 4000
    AF hash:    sha256
    Area offset:32768 [bytes]
    Area length:258048 [bytes]
    Digest ID:  0
Tokens:
Digests:
  0: pbkdf2
    Hash:       sha256
    Iterations: 334367
    Salt:       f0 ac 44 ... 
                f3 6f d5 ... 
    Digest:     cd a8 ... 
                23 2a ... 

$ uname -a
Linux amd12 6.3.2-arch1-1 #1 SMP PREEMPT_DYNAMIC Thu, 11 May 2023 16:40:42 +0000 x86_64 GNU/Linux

(OS: Arch Linux)

Eventualmente, sempre posso desbloquear, mas preciso de muitas tentativas, o que é irritante. Parece que o código de verificação ou o mecanismo para ler a entrada é inconsistente.

Eu me pergunto se é um problema conhecido (embora eu não tenha encontrado nada sobre isso)? Se não, existe uma maneira de depurar? Infelizmente, não vi nenhuma opção para obter feedback visual (acho que é considerado uma falha de segurança revelar o tamanho da senha).

Atualização: acabei de perceber que existe uma --debugopção. Embora a saída de uma execução bem-sucedida e com falha seja idêntica até o ponto em que o cálculo ocorre. Todos os cabeçalhos e somas de verificação no log de depuração são os mesmos.

Além disso, mostra o mesmo comportamento com o cryptsetup 2.4.3 em um Linux Mint Live CD.

luks
  • 1 1 respostas
  • 496 Views

1 respostas

  • Voted
  1. Best Answer
    Philipp Claßen
    2023-05-21T16:51:53+08:002023-05-21T16:51:53+08:00

    @frostschutz estava correto. Acontece que a memória da minha máquina mostra erros em uma execução do Memtest86+.

    A explicação mais provável é que a computação funciona ou falha dependendo de qual parte da RAM está sendo usada. E Argon2 - agora o padrão para derivação de chave - usa muita memória durante a computação.

    Mas não é culpa do cryptsetup. Agora, testei novamente com apenas um bloco de memória que passou em pelo menos uma execução do Memtest86+. Não é mais reproduzível. Ambas as versões ( < pwe cat pw |) agora estão sempre passando.

    Atualização: fiz mais testes com a remoção de slots de RAM. Curiosamente, funciona com slots individuais, mas em combinação torna-se pouco confiável. A máquina em si é nova, mas vi que o XMP (Extreme Memory Profile) estava habilitado. Pelo que li, é um padrão razoavelmente seguro no novo hardware, mas na minha máquina parece causar problemas. Depois de desativá-lo, ele funciona agora.

    Talvez eles devessem incluir Argon2 no memtest86+. No meu sistema, é ótimo detectar problemas de memória.

    • 12

relate perguntas

  • Maneira mais rápida de contar zero bytes em uma partição

  • Forneça a senha para udisks para desbloquear o dispositivo criptografado com LUKS

  • Como verificar novamente uma senha LUKS

  • Como aumentar o tamanho de uma partição que fica antes de uma criptografada?

  • alterar o nome designado da raiz lvm criptografada? de sdo para sdn no crypttab?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve