plugmate-duress-pin-trigger.ino

TrustKernel PlugMate : Ordinateur miniature USB-C sécurisé sous PlugOS · Fichier : plugmate-duress-pin-trigger.ino · Langage : Kotlin · Usage : Simuler la logique de déclenchement de l'effacement des clés via un code de contrainte (Duress PIN).

Montre comment structurer une application pour interagir avec le mécanisme de sécurité 'Duress PIN' qui efface les clés en cas de contrainte physique.

Le Duress PIN est une fonctionnalité système critique. Le code applicatif ne supprime pas directement les clés ; le firmware PlugOS le fait. Ce code illustre la logique de validation et la gestion des tentatives échouées. Assurez-vous que l'UI reste neutre lors de l'entrée du PIN de panique pour éviter d'alerter l'attaquant. Le reset automatique après échecs est géré par le kernel durci.

plugmate-duress-pin-trigger.ino

package com.trustkernel.plugmate.demo

import android.content.Context
import android.widget.Toast

/**
 * Note : L'effacement réel des clés est géré par le TEE (Trusted Execution Environment)
 * et le firmware PlugOS. Cette application ne peut que *déclencher* la demande
 * ou afficher un état d'alerte si l'API de sécurité est exposée.
 */
object DuressPinLogic {
    private const val DURESS_PIN = "0000" // PIN de panique
    private var failedAttempts = 0
    private val MAX_ATTEMPTS = 5

    /**
     * Vérifie le PIN saisi. Si le PIN de panique est utilisé,
     * le système PlugOS intercepte l'événement au niveau bas niveau
     * pour effacer les clés de chiffrement immédiatement.
     */
    fun checkPin(pin: String, context: Context) {
        if (pin == DURESS_PIN) {
            // Le système d'exploitation détecte ce PIN spécifique
            // et déclenche l'effacement des clés dans le TEE.
            // L'application peut afficher un message neutre pour ne pas alerter l'attaquant.
            Toast.makeText(context, "Connexion refusée.", Toast.LENGTH_SHORT).show()
            
            // Dans une implémentation réelle, le processus s'arrête ou redémarre
            // car les clés de session sont détruites.
        } else {
            // Logique d'authentification normale
            if (pin == "1234") {
                failedAttempts = 0
                // Accès autorisé
            } else {
                failedAttempts++
                if (failedAttempts >= MAX_ATTEMPTS) {
                    // PlugOS force un reset après 5 à 15 tentatives échouées
                    Toast.makeText(context, "Trop de tentatives. Réinitialisation...", Toast.LENGTH_LONG).show()
                }
            }
        }
    }
}

← Retour à la fiche