plugmate-duress-pin-trigger.ino
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()
}
}
}
}
}