plugmate-duress-pin-trigger.ino
Muestra cómo estructurar una aplicación para interactuar con el mecanismo de seguridad 'Duress PIN' que borra las claves en caso de coacción física.
El Duress PIN es una función crítica del sistema. El código de la aplicación no elimina directamente las claves; el firmware PlugOS lo hace. Este código ilustra la lógica de validación y el manejo de intentos fallidos. Asegúrese de que la interfaz de usuario permanezca neutral durante la entrada del PIN de pánico para no alertar al atacante. El reinicio automático tras fallos es gestionado por el kernel endurecido.
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()
}
}
}
}
}