Untitled

Anonymous
java
03/30/2026 1:27 AM
4.5 KB
18
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