Neste protocolo, os usuários precisam ser autenticados. Eles podem fazer isso com senhas, arquivos contendo chaves RSA privadas, dispositivos de hardware como Ledger Nano S e Ledger Nano X, etc.
Alguns meios de autenticação são mais seguros do que outros: usar um dispositivo de hardware projetado para armazenar uma chave privada sem permitir extraí-la é mais seguro do que armazenar a chave privada em um arquivo. Infelizmente, os mais seguros também são mais difíceis de usar. Os usuários que têm suas chaves em um dispositivo precisam carregar o dispositivo com eles, precisam digitar seu código PIN sempre que iniciarem uma sessão SSH, etc. Isso torna bastante difícil defender maneiras mais seguras do que senhas e arquivos para casos de uso em a segurança do acesso não é a prioridade.
Então a pergunta é: é possível armazenar o material de autenticação com mais segurança do que em um arquivo (que pode ser roubado por algum malware), sem alterar a experiência do usuário?
E a resposta é: sim, usando um TPM!
Um pouco de história
Por algum tempo, os computadores foram capazes de incorporar diretamente um chip de segurança. Este chip, denominado Trusted Platform Module (TPM), fornece muitos recursos, incluindo a capacidade de proteger chaves privadas usadas na criptografia de chave pública.
Por estar embutido nos computadores, não há necessidade de plugar um dispositivo no computador para utilizá-lo. Isso é, portanto, considerado menos seguro do que um dispositivo de hardware que pode ser armazenado em um local diferente do computador (isso permite impor o princípio de que, enquanto o dispositivo não estiver conectado ao computador, nenhum malware pode usar os segredos nele armazenados).
Portanto, o TPM não é a “melhor segurança”, mas ainda é muito mais seguro do que usar arquivos como $HOME/.ssh/id_rsa
para armazenar chaves privadas.
Como o TPM pode ser usado com o OpenSSH no Linux? Com um projeto chamado tpm2-pkcs11
, seguindo as instruções disponíveis em muitos sites por muitos anos, inclusive no documentação oficial de seu repositório de código.
Agora, quais são as novidades? Este software agora está finalmente empacotado no Ubuntu e no Debian, o que o torna finalmente disponível para a maioria dos usuários do Linux!
Mais precisamente, aqui está uma linha do tempo:
- Em 2014, foram publicadas as principais especificações do TPM 2.0. Para interagir com um TPM do software, houve um esforço de padronização e foram criadas duas pilhas de software incompatíveis: a do Trusted Computing Group (TCG), chamada Pilha de Software TPM (TSS), e o da IBM, também chamado Pilha de software TPM.
- Em 2018, o projeto
tpm2-pkcs11
foi criado para fornecer uma interface PKCS#11 para um TPM 2.0, usando o TSS do TCG. PKCS # 11 é um padrão que define uma interface de programação de aplicativos (API) chamada Criptoki para usar tokens que armazenam chaves criptográficas. Como o OpenSSH suportava o uso de uma interface PKCS#11 para realizar a autenticação do usuário, isso permitia o uso do TPM para armazenar as chaves usadas para autenticação SSH. - Em fevereiro de 2019,
tpm2-pkcs11
foi adicionado a Fedora 29. - Em setembro de 2019, o CentOS 8 foi lançado com este pacote.
- Em abril 2020,
tpm2-pkcs11
foi adicionado a Debian Sid. Infelizmente não continha o programatpm2_ptool
o que é necessário para criar chaves facilmente. Este problema foi relatado em Erro do Debian #968310. - Em janeiro de 2021, o pacote Debian foi fixado (e o mantenedor reconheceu minha ajuda!).
- Em abril de 2021, Ubuntu 21.04 Hipopótamo Hirsuto foi lançado com o pacote fixo.
- Em agosto de 2021, Debian 11 Bullseye foi lançado com o pacote fixo
Atual tpm2-pkcs11
está disponível no Debian, Ubuntu e várias outras distribuições Linux listadas em Repologia.
Usando tpm2-pkcs11
No Debian 11, aqui estão as etapas para gerar e usar uma nova chave SSH armazenada com segurança pelo TPM:
- Comando de instalação
tpm2_ptool
e bibliotecalibtpm2_pkcs11.so.1
, que são fornecidos por dois pacotes:
2. Verifique se o sistema pode usar um TPM 2.0. Se uma das verificações a seguir falhar, isso pode significar que o sistema não possui TPM, TPM 1.2 ou TPM 2.0 desativado nas configurações do BIOS:
3. Adicione o usuário atual ao grupo que pode acessar o dispositivo TPM /dev/tpmrm0
. No Debian e no Ubuntu, os usuários precisam pertencer a um grupo chamado tss
(graças à configuração fornecida por tpm-udev
pacote). O seguinte comando adiciona o usuário atual a este grupo:
Inicialize um armazenamento de usuário, protegido por uma senha e um SOPIN e crie uma chave, por exemplo, uma chave de Curva Elíptica na curva denominada “NIST P-256” (também conhecida como “secp256r1”):
4. A sigla SOPIN significa Número de Identificação Pessoal do Oficial de Segurança e é um conceito da especificação do PKCS#11. Em casos de uso simples, pode ser visto como uma “senha de recuperação” que permite modificar a senha quando, por exemplo, ela foi perdida.
5. Exiba a chave pública desta nova chave:
6. Configure a nova chave pública em um servidor, por exemplo, escrevendo-a em $HOME/.ssh/authorized_keys
ou nas configurações da conta do GitHub ou em qualquer outro local onde as chaves públicas SSH são usadas.
7. Configure o cliente SSH para usar tpm2-pkcs11
para se conectar ao servidor, por exemplo, escrevendo isso em $HOME/.ssh/config
(lado do cliente):
Conecte-se ao servidor (observe que a etapa anterior pode ser pulada:
Trabalho futuro
A seção anterior apresentou como criar uma nova chave no TPM. Embora isso permita o uso de um TPM para proteger a autenticação SSH, há dois recursos necessários para torná-lo uma alternativa real ao uso de arquivos para armazenar chaves privadas:
- Recurso nº 1: importar chaves SSH existentes para um TPM em vez de criar novas (o que permite uma transição suave para o armazenamento TPM, fazer backup das chaves, caso o computador seja quebrado ou perdido, etc.).
- Recurso nº 2: usar chaves SSH sem senha, como arquivos de chave privada desprotegidos (esse recurso é mais seguro do que arquivos de chave, pois a chave protegida não pode ser extraída do TPM).
Eu implementei os dois recursos em tpm2-pkcs11
e os enviou em Pull Requests #681 e #695. O destaque nº 1 também foi apresentado em maio durante a chamada online semanal de comunidade tpm.dev e a gravação está disponível em https://developers.tpm.dev/posts/14389750.
Portanto, é provável que ambos os recursos sejam disponibilizados em uma versão futura do tpm2-pkcs11
.
A propósito, para leitores curiosos que desejam entender o interior de tpm2-pkcs11
, publiquei um artigo sobre eles na conferência SSTIC 2021, chamado Protegendo a autenticação SSH com TPM 2.0 (artigo em inglês, apresentação em francês). Além disso, os leitores que desejam experimentar coisas sem tocar em um TPM real podem se interessar pela seção “Emulando um TPM 2.0” deste artigo.
(Ilustração: Rainer Knäpper, licença de arte gratuita)
- Conteúdo com tecnologia de SEO e distribuição de relações públicas. Seja amplificado hoje.
- PlatoAiStream. Inteligência de Dados Web3. Conhecimento Amplificado. Acesse aqui.
- Cunhando o Futuro com Adryenn Ashley. Acesse aqui.
- Compre e venda ações em empresas PRE-IPO com PREIPO®. Acesse aqui.
- Fonte: https://www.ledger.com/blog/ssh-with-tpm
- :tem
- :é
- :não
- :onde
- $UP
- 1
- 11
- 13
- 14
- 15%
- 2014
- 2018
- 2019
- 2020
- 2021
- 30
- 8
- 80
- a
- habilidade
- Capaz
- Sobre
- Acesso
- Conta
- reconhecido
- adicionar
- adicionado
- Adiciona
- advogado
- tb
- alternativa
- an
- e
- responder
- qualquer
- api
- Aplicação
- Abril
- SOMOS
- Arte
- artigo
- AS
- At
- AGOSTO
- autenticado
- Autenticação
- disponível
- apoio
- BE
- tornam-se
- sido
- ambos
- Quebrado
- Bug
- mas a
- by
- chamada
- CAN
- não podes
- transportar
- casas
- casos
- CGI
- mudança
- verificar
- Cheques
- lasca
- cliente
- código
- computador
- computadores
- computação
- conceito
- Conferência
- Configuração
- CONTATE-NOS
- conectado
- considerado
- poderia
- crio
- criado
- Criar
- criptografia
- criptografia
- curioso
- Atual
- curva
- Define
- projetado
- Dev
- dispositivo
- Dispositivos/Instrumentos
- DID
- diferente
- difícil
- diretamente
- inválido
- Ecrã
- distribuições
- do
- documentação
- parece
- durante
- facilmente
- esforço
- Elliptic
- embutir
- incorporado
- habilitado
- permite
- impor
- Inglês
- etc.
- SEMPRE
- Cada
- exemplo
- existente
- vasta experiência
- extrato
- falha
- Característica
- Funcionalidades
- Fevereiro
- Envie o
- Arquivos
- Finalmente
- fixado
- seguinte
- Escolha
- Gratuito
- Francês
- da
- futuro
- gerar
- GitHub
- Grupo
- Hardware
- dispositivo de hardware
- dispositivos de hardware
- Ter
- SUA PARTICIPAÇÃO FAZ A DIFERENÇA
- Como funciona o dobrador de carta de canal
- Como Negociar
- HTML
- http
- HTTPS
- i
- IBM
- identificação
- if
- implementado
- importador
- in
- Incluindo
- incompatível
- iniciar
- em vez disso
- instruções
- interagir
- interessado
- Interface
- para dentro
- emitem
- IT
- ESTÁ
- janeiro
- Janeiro 2021
- jpg
- Chave
- chaves
- conhecido
- Ledger
- Ledger Nano
- Ledger Nano S
- Ledger Nano X
- menos
- como
- Provável
- linux
- Listado
- localização
- perdido
- a Principal
- fazer
- FAZ
- Fazendo
- malwares
- muitos
- material
- max-width
- Posso..
- significar
- significa
- módulo
- mais
- Além disso
- a maioria
- muito
- my
- Nomeado
- nano
- necessário
- você merece...
- necessário
- Novo
- notícias
- não
- agora
- of
- Oficial
- on
- ONE
- queridos
- online
- or
- ordem
- Outros
- Outros
- pacote
- empacotado
- pacotes
- doloroso
- Senha
- senhas
- realizar
- pessoal
- Lugar
- plataforma
- platão
- Inteligência de Dados Platão
- PlatãoData
- plugue
- possível
- justamente
- apresentação de negócios
- apresentado
- anterior
- princípio
- prioridade
- privado
- chave privada
- Chaves Privadas
- Programação
- projeto
- proteger
- protegido
- proteger
- protocolo
- fornecer
- fornecido
- fornece
- público
- chave pública
- chaves públicas
- publicado
- questão
- leitores
- reais
- gravação
- liberar
- liberado
- Informou
- requeridos
- rsa
- s
- Seção
- seguro
- firmemente
- segurança
- visto
- Setembro
- Sessão
- Configurações
- vários
- lado
- simples
- So
- Software
- alguns
- especificação
- especificações
- Pilhas
- padrão
- Passo
- Passos
- Ainda
- roubado
- armazenamento
- loja
- armazenadas
- apresentado
- tal
- Suportado
- .
- do que
- obrigado
- que
- A
- O semanário
- deles
- Eles
- Lá.
- assim sendo
- deles
- coisas
- isto
- tempo
- linha do tempo
- para
- Tokens
- tocando
- transição
- confiável
- tentar
- dois
- tipo
- Ubuntu
- compreender
- infelizmente
- usar
- usava
- Utilizador
- Experiência do Usuário
- usuários
- utilização
- queremos
- foi
- Caminho..
- maneiras
- sites
- semanal
- foram
- quando
- qual
- enquanto
- QUEM
- com
- sem
- escrita
- X
- anos
- sim
- zefirnet