Acesso ao dTPM do Azure IoT Edge para Linux no Windows

Aplica-se a:IoT Edge 1.4 checkmark 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.

  1. Abrir o Visual Studio 2019 ou 2022.

  2. Selecione Criar um novo projeto.

  3. Escolha Aplicativo de Console na lista de modelos e selecione Avançar.

    Visual Studio create new solution

  4. Preencha os campos Nome do Projeto, Local e Nome da Solução e selecione Avançar.

  5. 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.

  6. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Gerenciar Pacotes NuGet.

  7. Selecione Procurar e, em seguida, pesquise Microsoft.TSS. Para obter mais informações sobre esse pacote, consulte Microsoft.TSS.

  8. Escolha o pacote Microsoft.TSS na lista e selecione Instalar.

    Screenshot that shows Visual Studio add NuGet packages .

  9. Edite o arquivo Program.cs e substitua o conteúdo pelo Código de exemplo do TPM do EFLOW – Program.cs.

  10. Selecione Compilar>Compilar solução para compilar o projeto. Verifique se a compilação foi bem-sucedida.

  11. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Publicar.

  12. 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.

  13. 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.

    Screenshot that shows publish options .

  14. 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.

  1. Inicie uma sessão com privilégios elevados do PowerShell usando Executar como Administrador.

  2. 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"
    
  3. 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"
    
  4. 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
    
  5. Conecte-se à máquina virtual EFLOW.

    Connect-EflowVm
    
  6. 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.

  7. Execute o seguinte comando para extrair todo o conteúdo do arquivo tar.

    tar -xvzf TPM.tar
    
  8. Após a extração, você deverá ver uma nova pasta com todos os arquivos TPM.

  9. Altere o diretório para a pasta TPM.

    cd TPM
    
  10. 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
    
  11. 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
    
  12. 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.

    Screenshot that shows EFLOW dTPM output.

Próximas etapas