Azure Eflow VM decryption with TPM

Deni Gahlinger 25 Points de réputation
2024-04-29T07:04:21.38+00:00

Hello,

I am trying to use TPM (using TSS c# library) to decrypt secrets in IoT modules running in an Eflow VM. There are three layers :

  • The host OS (Windows). That has access to the TPM
  • The Eflow VM. That returns an empty string when decrypting
  • The Module that runs on a docker container. That returns an empty string as well.

What was done

To use TPM on Eflow side, I use Set-EflowVmFeature -feature DpsTpm -enable -headless. It seems to work fine with for the Device provisionning (DPS). (we use basic DPS without customization)

To connect our modules to a server that provides the data, we need to decrypt some secrets that we get from the Module Twin. (getting the encrypted secrets from the twin works fine). The secrets are encrypted asymmetrically using TPM generated key pair and can be read only from the machine that runs the Edge Device.

We faced some issues to use TPM from the module in the Docker container (last layer where will run the module), so we :

  • Changed the Dockerfile to fix a wrong filename of the .so file for the TSS library (more details here: https://github.com/microsoft/TSS.MSR/issues/193)
  • Mount the Dbus of the EFlowVM to the Docker Container's to be able to use the same TPM from the EFlow VM.

Now, that I fixed all error messages, when I run the module, the decrypted secret is an empty string (on Eflow VM and the Docker Container, but Windows host, decryption works fine). I guess there is an issue between Windows TPM and Eflow TPM, like the Dbus to mount between the Eflow and the docker container. It seems to work fine for DPS, but for decryption, It doesn't.

When I check the --help for the Set-EflowVmFeature DpsTpm, It says "for provisioning". I don't know if that means that TPM decryption is not accessible from Eflow side and only DPS features are available or if something else is wrong in my configuration.User's image

Alternative

If Eflow doesn't provide all access to TPM to decrypt data, I imagined another alternative that is to run a service on Windows side (ASP.NET) with an endpoint string DecryptTpm(string cipher) and call it from the module directly. It will passthrough the different layers (windows - eflow - docker container).

To achieve this, I need to configure the network of the Eflow VM to have access to the host port. I found a lot of documentation about that. But I am not an expert at all in network configuration and VM, and reading many times the documentation (https://learn.microsoft.com/en-us/azure/iot-edge/how-to-configure-iot-edge-for-linux-on-windows-networking?view=iotedge-1.4) didn't help me to understand what to do.

Questions

  • Is the DpsTpm feature supposed to give access to Tpm decryption or not?
    • If yes : Why does the TPM return an empty string?
    • If no : How am I supposed to configure the network to access windows host access point from docker container module without exposing the decryption externally ?
  • Any other suggestion for another alternative?
Azure
Azure
Plateforme et infrastructure de cloud computing pour la génération, le déploiement et la gestion d’applications et de services à travers un réseau mondial de centres de données gérés par Microsoft.
112 questions
0 commentaires Aucun commentaire
{count} votes

Réponse acceptée
  1. Alexis Thorez (CONCENTRIX CORPORATION) 5 745 Points de réputation Fournisseur Microsoft
    2024-04-30T04:16:52.6833333+00:00

    Bonjour Deni,

    Merci d'avoir sollicité la communauté Q&A France.

    La fonctionnalité DpsTpm est conçue pour permettre l’utilisation de la technologie TPM pour la provision des appareils IoT Edge en utilisant le service de provisionnement des appareils (DPS) et pour un accès en lecture seule aux clés cryptographiques stockées dans le TPM. Cela signifie que vous devriez pouvoir utiliser DpsTpm pour lire les clés cryptographiques, mais pas pour écrire de nouvelles clés ou pour le décryptage direct.

    Si le TPM renvoie une chaîne vide, cela pourrait être dû à plusieurs raisons, comme une mauvaise initialisation ou un problème de communication avec le TPM. Assurez-vous que l’index NV est initialisé correctement et que la fonctionnalité de passage du TPM est activée.

    Pour configurer le réseau de la VM Eflow afin d’accéder au port hôte sans exposer le décryptage à l’extérieur, vous pouvez envisager de créer un commutateur virtuel (virtual switch) et de configurer l’adresse IP et les serveurs DNS de la VM. Cela vous permettra de communiquer avec l’hôte Windows tout en maintenant le décryptage à l’intérieur du réseau sécurisé.

    Si vous cherchez une autre alternative, vous pourriez envisager d’utiliser un mécanisme de stockage sécurisé des clés qui est accessible à la fois par l’hôte Windows et par les conteneurs Docker, comme un HSM (Hardware Security Module) ou un service de gestion des clés. Cela pourrait simplifier la gestion des clés et le processus de décryptage sans dépendre directement du TPM de l’hôte.

    Je vous invite à consulter les liens suivant qui pourront vous être utiles:

    A bientôt

    Alexis

    Si cette réponse a répondu à votre question, veuillez « Accepter comme réponse » et voter en utilisant « Pouce levé » afin que la pertinence de ce message s’améliore lorsque quelqu’un dans la communauté recherche une requête similaire

    1 personne a trouvé cette réponse utile.

1 réponse supplémentaire

Trier par : Le plus utile
  1. Supprimé

    Cette réponse a été supprimée en raison d’une violation de notre Code de conduite. La réponse a été signalée manuellement ou identifiée via la détection automatisée avant que l’action ne soit entreprise. Pour obtenir plus d’informations, veuillez consulter notre Code de conduite.


    Les commentaires ont été désactivés. En savoir plus