Acesso ao dTPM do Azure IoT Edge para Linux no Windows
Aplica-se a: IoT Edge 1.4
Importante
A versão com suporte é a IoT Edge 1.4. Se você estiver em uma versão anterior, confira Atualizar o IoT Edge.
Um chip TPM (Trusted Platform Module) é um processador de criptografia seguro projetado para desempenhar as operações de criptografia. Essa tecnologia foi desenvolvida para fornecer funções relacionadas à segurança com base em hardware. A máquina virtual do Azure IoT Edge para Linux no Windows (EFLOW) não tem um TPM virtual anexado à VM. No entanto, o usuário pode habilitar ou desabilitar o recurso de passagem do TPM, que permite que a máquina virtual EFLOW use o Windows TPM do sistema operacional do host. O recurso de passagem do TPM habilita dois cenários principais:
- Usar a tecnologia TPM para provisionamento de dispositivo IoT Edge usando o DPS (Serviço de Provisionamento de Dispositivos)
- Acesso somente leitura a chaves criptográficas armazenadas dentro do TPM.
Este artigo descreve como desenvolver um código de exemplo em C# para ler chaves criptográficas armazenadas no TPM do dispositivo.
Importante
O acesso às chaves do TPM é limitado a somente leitura. Para gravar chaves no TPM, será necessário fazer isso no sistema operacional do host do Windows.
Pré-requisitos
Um sistema operacional do host do Windows com um TPM ou vTPM (por exemplo, usando a máquina virtual do sistema operacional do host do Windows).
Máquina virtual EFLOW com a passagem TPM habilitada. Em uma sessão do PowerShell com privilégios elevados, use
Set-EflowVmFeature -feature "DpsTpm" -enable
para habilitar a passagem do TPM. Para obter mais informações, confira Set-EflowVmFeature para habilitar a passagem do TPM.Verifique se o índice NV (índice padrão=3001) é inicializado com 8 bytes de dados. O AuthValue padrão usado pelo exemplo é {1,2,3,4,5,6,7,8} que corresponde ao exemplo de NV (Windows) nas bibliotecas TSS.MSR ao gravar no TPM. Toda a inicialização de índice deve ocorrer no Host do Windows antes de ler da VM EFLOW. Para obter mais informações sobre exemplos de TPM, consulte TSS.MSR.
Aviso
A habilitação da passagem do TPM para a máquina virtual pode aumentar os riscos de segurança.
Criar o executável dTPM
As etapas a seguir mostram como criar um executável de exemplo para acessar um índice TPM da VM EFLOW. Para obter mais informações sobre a passagem do TPM do EFLOW, consulte Segurança do Azure IoT Edge para Linux no Windows.
Abrir o Visual Studio 2019 ou 2022.
Selecione Criar um novo projeto.
Escolha Aplicativo de Console na lista de modelos e selecione Avançar.
Preencha os campos Nome do Projeto, Local e Nome da Solução e selecione Avançar.
Escolha uma estrutura de destino. A versão mais recente do .NET 6.0 LTS é preferencial. Após escolher uma estrutura de destino, selecione Criar. O Visual Studio cria uma nova solução de aplicativo de console.
No Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Gerenciar Pacotes NuGet.
Selecione Procurar e, em seguida, pesquise
Microsoft.TSS
. Para obter mais informações sobre esse pacote, consulte Microsoft.TSS.Escolha o pacote Microsoft.TSS na lista e selecione Instalar.
Edite o arquivo Program.cs e substitua o conteúdo pelo Código de exemplo do TPM do EFLOW – Program.cs.
Selecione Compilar>Compilar solução para compilar o projeto. Verifique se a compilação foi bem-sucedida.
No Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Publicar.
No assistente de Publicação, selecione Pasta>Pasta. Selecione Procurar e escolha um local de saída para o arquivo executável a ser gerado. Selecione Concluir. Depois que o perfil de publicação for criado, selecione Fechar.
Na guia Publicar, selecione o link Mostrar todas as configurações. Altere as configurações a seguir e selecione Salvar.
- Runtime de destino: linux-x64.
- Modo de implantação: autossuficiente.
Selecione Publicar e aguarde a criação do arquivo executável.
Se a publicação for bem-sucedida, você deverá ver os novos arquivos criados em sua pasta de saída.
Copiar e executar o arquivo executável
Depois que o arquivo executável e os arquivos de dependência forem criados, você precisará copiar a pasta para a máquina virtual EFLOW. As etapas a seguir mostram como copiar todos os arquivos necessários e como executar o arquivo executável na máquina virtual do EFLOW.
Inicie uma sessão com privilégios elevados do PowerShell usando Executar como Administrador.
Altere o diretório para a pasta pai que contém os arquivos publicados. Por exemplo, se os arquivos publicados estiverem na pasta TPM no diretório
C:\Users\User
. Você pode usar o comando a seguir para alterar para a pasta pai.cd "C:\Users\User"
Crie um arquivo tar com todos os arquivos criados nas etapas anteriores. Para obter mais informações sobre o suporte a tar do PowerShell, consulte Tar e Curl no Windows. Por exemplo, se você tiver todos os arquivos na pasta TPM, poderá usar o comando a seguir para criar o arquivo TPM.tar.
tar -cvzf TPM.tar ".\TPM"
Depois que o arquivo TPM.tar for criado com êxito, use o cmdlet
Copy-EflowVmFile
para copiar o arquivo tar criado para a VM EFLOW. Por exemplo, se o nome do arquivo tar for TPM.tar no diretórioC:\Users\User
. você pode usar o comando a seguir para copiar para a VM EFLOW.Copy-EflowVmFile -fromFile "C:\Users\User\TPM.tar" -toFile "/home/iotedge-user/" -pushFile
Conecte-se à máquina virtual EFLOW.
Connect-EflowVm
Altere o diretório para a pasta em que você copiou o arquivo tar e verifique se o arquivo está disponível. Se você usou o exemplo acima, quando conectado à VM EFLOW, você já estará na pasta raiz iotedge-user. Execute o comando
ls
para listar os arquivos e pastas.Execute o seguinte comando para extrair todo o conteúdo do arquivo tar.
tar -xvzf TPM.tar
Após a extração, você deverá ver uma nova pasta com todos os arquivos TPM.
Altere o diretório para a pasta TPM.
cd TPM
Adicione a permissão arquivo executável principal. Por exemplo, se o nome do projeto for TPMRead, o arquivo executável principal será chamado TPMRead. Execute o comando a seguir para torná-lo executável.
chmod +x TPMRead
Para resolver um Problema de globalização de ICU, execute o comando a seguir. Por exemplo, se o nome do projeto for TPMTest, execute:
sed -i '/"configProperties": /a \\t"System.Globalization.Invariant\": true,' TPMTest.runtimeconfig.json
A última etapa é executar o arquivo executável. Por exemplo, se o nome do projeto for TPMTest, execute o seguinte comando:
./TPMTest
Você deverá ver um resultado semelhante ao seguinte.