Untitled
Anonymous
java
03/30/2026 1:27 AM
4.5 KB
17
Indexable
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.time.Instant;
/**
* Simulation d’un système de messagerie sécurisé pour YOKLEIN.
* Utilise HMAC-SHA256 pour garantir l’authenticité et l’intégrité des messages.
* (HmacSHA256 utilise SHA-256 en interne)
*/
public class MessagerieSecurisee {
private static final String ALGORITHME = "HmacSHA256";
/**
* Génère un MAC (s = Sk(m)) à partir d’un message et d’une clé secrète.
*/
public static String genererMAC(String message, String cleSecrete) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(
cleSecrete.getBytes(StandardCharsets.UTF_8),
ALGORITHME
);
Mac mac = Mac.getInstance(ALGORITHME);
mac.init(keySpec);
byte[] resultat = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(resultat);
}
/**
* Vérifie le MAC reçu (Vk(s, m)).
*/
public static boolean verifierMAC(String message, String macRecu, String cleSecrete) throws Exception {
String macCalcule = genererMAC(message, cleSecrete);
return macCalcule.equals(macRecu);
}
public static void main(String[] args) {
try {
// Clé secrète partagée (simulation)
String clePartagee = "Yoklein_Secure_Key_2026_!@#";
// =========================
// ÉMETTEUR
// =========================
System.out.println("=== ÉMETTEUR (Service médical YOKLEIN) ===");
String timestamp = Instant.now().toString();
String messageOriginal = "ID_PATIENT: 8829 | DIAGNOSTIC: Stable | DOSE: 50mg";
// Message complet (inclut protection anti-rejeu)
String messageAEnvoyer = timestamp + "|" + messageOriginal;
System.out.println("Message envoyé : " + messageAEnvoyer);
// Génération du MAC
String macEnvoye = genererMAC(messageAEnvoyer, clePartagee);
System.out.println("MAC généré : " + macEnvoye);
// =========================
// RÉCEPTEUR
// =========================
System.out.println("\n=== RÉCEPTEUR (Médecin) ===");
System.out.println("Message reçu : " + messageAEnvoyer);
System.out.println("MAC reçu : " + macEnvoye);
boolean estValide = verifierMAC(messageAEnvoyer, macEnvoye, clePartagee);
if (estValide) {
System.out.println("Résultat : MESSAGE AUTHENTIQUE ✔");
} else {
System.out.println("Résultat : MESSAGE REJETÉ ✖");
}
// =========================
// SIMULATION D’ATTAQUE
// =========================
System.out.println("\n=== SIMULATION D’ATTAQUE ===");
String messageModifie = messageAEnvoyer + " | MODIFICATION MALVEILLANTE";
boolean attaqueDetectee = verifierMAC(messageModifie, macEnvoye, clePartagee);
if (!attaqueDetectee) {
System.out.println("Résultat : ALTÉRATION DÉTECTÉE ✔ (MAC invalide)");
}
} catch (Exception e) {
System.err.println("Erreur : " + e.getMessage());
}
}
}Editor is loading...
Leave a Comment