Files
Camilou.fr/HTML/TN/Crypto/test10a.html
T
Camilla Schoeser ec81bcd634 ajout tout
2026-05-29 21:10:04 +02:00

220 lines
9.1 KiB
HTML

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>SIGNAL_STREAM_FINAL</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Orbitron:wght@500;700&display=swap');
:root {
--neon: #00ff9f;
--magenta: #ff007a;
--bg: #01050a;
}
body, html {
margin: 0; padding: 0; width: 100%; height: 100%;
background: var(--bg); color: var(--neon);
font-family: 'Share Tech Mono', monospace; overflow: hidden;
}
/* L'espace 3D */
#stage {
width: 100vw; height: 100vh;
perspective: 1200px;
display: flex; justify-content: center; align-items: center;
}
#world {
position: relative; width: 100%; height: 100%;
transform-style: preserve-3d;
transition: transform 1s cubic-bezier(0.19, 1, 0.22, 1);
}
/* Design des Slides */
.slide {
position: absolute;
width: 800px; min-height: 450px;
left: 50%; top: 50%;
margin-left: -400px; margin-top: -225px; /* Centrage précis */
background: rgba(2, 12, 20, 0.95);
border: 1px solid rgba(0, 255, 159, 0.3);
padding: 40px; box-sizing: border-box;
opacity: 0.15;
transform: translateZ(-500px) rotateY(20deg); /* Position de repos "lointaine" */
transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
pointer-events: none;
box-shadow: 0 0 30px rgba(0,0,0,0.5);
}
/* La slide active vient sur le devant de la scène */
.slide.active {
opacity: 1;
transform: translateZ(200px) rotateY(0deg) rotateX(0deg);
border-color: var(--neon);
box-shadow: 0 0 50px rgba(0, 255, 159, 0.2);
pointer-events: auto;
z-index: 100;
}
/* Titres et contenus */
h2 { font-family: 'Orbitron', sans-serif; color: white; border-left: 4px solid var(--magenta); padding-left: 15px; }
.highlight { color: var(--magenta); }
.dim { opacity: 0.6; font-size: 0.9rem; }
table { width: 100%; border-collapse: collapse; margin-top: 15px; font-size: 0.8rem; }
th, td { border: 1px solid rgba(0, 255, 159, 0.2); padding: 8px; text-align: left; }
/* Décorations de fond */
.bg-element {
position: absolute; border: 1px solid var(--neon); opacity: 0.1; pointer-events: none;
}
#nav {
position: fixed; bottom: 30px; width: 100%; text-align: center;
font-size: 0.8rem; letter-spacing: 2px; opacity: 0.6;
}
</style>
</head>
<body>
<div id="stage">
<div id="world">
<div class="slide active" id="s0">
<p class="highlight">// BOOT_PROTOCOL_ANALYSIS</p>
<h2>MESSAGERIE SÉCURISÉE</h2>
<p><strong>C.I.D.A :</strong> Confid. / Intégrité / Auth. / Dispo.</p>
<div style="margin-top:30px; border: 1px dashed var(--neon); padding: 15px;">
<p>> PFS (Confidentialité Persistante)<br>
> Auto-guérison (Double Ratchet)<br>
> Déniabilité & Asynchronisme</p>
</div>
<p class="dim" style="margin-top:40px;">TELECOM NANCY // TOM // 2026</p>
</div>
<div class="slide" id="s1">
<h2>HISTORIQUE : L'ÈRE DU CLAIR</h2>
<p><span class="highlight">1982 - SMTP :</span> "Hop-by-Hop". Chaque serveur lit le contenu.</p>
<p><span class="highlight">1992 - SMS :</span> Stockage en clair dans le SMSC opérateur. <br>Accès total pour Orange / SFR / AT&T.</p>
<p><span class="highlight">2008-2020 - RCS :</span> Evolution multimédia. E2EE imposé par Google en 2020. Problèmes d'interopérabilité.</p>
</div>
<div class="slide" id="s2">
<h2>PGP (1991) vs OTR (2004)</h2>
<p><strong>PGP :</strong> E2EE asynchrone. Crypto = "Arme".<br>
<span class="highlight">LIMITE :</span> Pas de PFS. Clé compromise = Passé compromis.</p>
<hr style="opacity:0.2; margin:20px 0;">
<p><strong>OTR :</strong> Ajoute la PFS et la Déniabilité.<br>
<span class="highlight">ÉCHEC :</span> Protocole SYNCHRONE. Les deux doivent être en ligne. "Session Broken" sur mobile.</p>
</div>
<div class="slide" id="s3">
<h2>2013 : RÉVOLUTION SIGNAL</h2>
<p>Le meilleur d'OTR (PFS) + Le meilleur de PGP (Async).</p>
<ul>
<li><strong>X3DH :</strong> Échange de clés asynchrone via Pre-keys.</li>
<li><strong>Double Ratchet :</strong> Clé renouvelée à chaque message.</li>
<li><strong>Résilience :</strong> Remet les messages dans l'ordre.</li>
</ul>
<p class="dim">Adopté par WhatsApp, Google Messages, Skype.</p>
</div>
<div class="slide" id="s4">
<h2>BENCHMARK SÉCURITÉ</h2>
<table>
<tr><th>Critère</th><th>SMS</th><th>PGP</th><th>OTR</th><th>Signal</th></tr>
<tr><td>E2EE</td><td></td><td></td><td></td><td></td></tr>
<tr><td>PFS</td><td></td><td></td><td></td><td></td></tr>
<tr><td>Async</td><td></td><td></td><td></td><td></td></tr>
<tr><td>Auto-heal</td><td></td><td></td><td></td><td></td></tr>
</table>
</div>
<div class="slide" id="s5">
<h2>CŒUR TECHNIQUE (X3DH)</h2>
<p style="text-align:center; font-size: 6rem; margin:20px 0;">🦦</p>
<p style="text-align:center;">[ DÉMONSTRATION AU TABLEAU ]</p>
<p class="dim" style="text-align:center;">Analyse du Double Ratchet & des Pre-keys</p>
</div>
<div class="slide" id="s6">
<h2 class="highlight">VULNÉRABILITÉS & FUTUR</h2>
<p><strong>Quantique :</strong> Menace sur ECDH. Signal déploie <span class="highlight">PQXDH</span>.</p>
<p><strong>Endpoints :</strong> Pegasus/Spywares. Si l'OS est corrompu, la crypto ne sert à rien.</p>
<p><strong>MitM :</strong> Risque de fausse clé publique. <br>Solution : Safety Numbers.</p>
</div>
<div class="slide" id="s7">
<h2>SOUVERAINETÉ : MATRIX VS DISCORD</h2>
<p><strong>Discord :</strong> Centralisé. Non-E2EE (Modération). Métadonnées exploitées.</p>
<p><strong>Matrix :</strong> Fédéré. E2EE par défaut. Utilisé par l'État (Tchap). Souveraineté totale.</p>
<div style="border:1px solid var(--magenta); padding:10px; margin-top:20px; text-align:center;">
CONCLUSION : La sécurité est un équilibre.
</div>
</div>
</div>
</div>
<div id="nav">ESPACE / FLÈCHES POUR NAVIGUER</div>
<script>
let current = 0;
const slides = document.querySelectorAll('.slide');
const world = document.getElementById('world');
// On disperse les slides de manière déstructurée au début
slides.forEach((s, i) => {
if(i !== 0) {
const rx = (Math.random() - 0.5) * 1000;
const ry = (Math.random() - 0.5) * 1000;
const rz = -1000 - (Math.random() * 500);
const rot = (Math.random() - 0.5) * 60;
s.style.transform = `translate3d(${rx}px, ${ry}px, ${rz}px) rotateZ(${rot}deg)`;
}
});
function nextSlide() {
slides[current].classList.remove('active');
// On renvoie la slide actuelle dans le décor avec un angle aléatoire
const rx = (Math.random() - 0.5) * 1000;
const ry = (Math.random() - 0.5) * 1000;
const rot = (Math.random() - 0.5) * 45;
slides[current].style.transform = `translate3d(${rx}px, ${ry}px, -1000px) rotateZ(${rot}deg)`;
current = (current + 1) % slides.length;
slides[current].classList.add('active');
// Le style "active" dans le CSS va forcer la slide à revenir au centre (0,0,200px)
}
function prevSlide() {
slides[current].classList.remove('active');
const rx = (Math.random() - 0.5) * 1000;
const ry = (Math.random() - 0.5) * 1000;
slides[current].style.transform = `translate3d(${rx}px, ${ry}px, -1000px)`;
current = (current - 1 + slides.length) % slides.length;
slides[current].classList.add('active');
}
window.addEventListener('keydown', e => {
if(e.key === 'ArrowRight' || e.key === ' ') nextSlide();
if(e.key === 'ArrowLeft') prevSlide();
});
// Éléments de fond aléatoires
for(let i=0; i<20; i++) {
const el = document.createElement('div');
el.className = 'bg-element';
el.style.width = Math.random() * 200 + 'px';
el.style.height = Math.random() * 200 + 'px';
el.style.left = Math.random() * 100 + '%';
el.style.top = Math.random() * 100 + '%';
el.style.transform = `translateZ(-800px)`;
world.appendChild(el);
}
</script>
</body>
</html>