plugmate-duress-pin-trigger.ino
Shows how to structure an app to interact with the 'Duress PIN' security mechanism that wipes keys in case of physical coercion.
The Duress PIN is a critical system feature. The application code does not directly delete keys; the PlugOS firmware does. This code illustrates validation logic and failed attempt handling. Ensure the UI remains neutral during panic PIN entry to avoid alerting the attacker. Automatic reset after failures is handled by the hardened kernel.
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()
}
}
}
}
}