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

180 lines
6.9 KiB
HTML

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>STACK_HACK_FINAL</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=VT323&family=Orbitron:wght@400;700&display=swap');
:root {
--cyan: #00f2ff;
--alert: #ff3e00;
--bg: #050608;
--card-bg: rgba(10, 12, 18, 0.95);
}
body, html {
margin: 0; padding: 0; background: var(--bg);
color: #ccc; font-family: 'monospace';
overflow: hidden; height: 100vh;
}
/* --- FX DE FOND --- */
#laser {
position: fixed; top: 0; left: 0; width: 100%; height: 1px;
background: var(--cyan); box-shadow: 0 0 10px var(--cyan);
z-index: 1000; pointer-events: none; animation: scan 3s linear infinite;
}
@keyframes scan { from { top: 0%; } to { top: 100%; } }
canvas { position: fixed; inset: 0; z-index: 1; opacity: 0.15; }
/* --- STACK SYSTEM --- */
#desk { position: relative; width: 100vw; height: 100vh; perspective: 1000px; z-index: 10; }
.card {
position: absolute; width: 450px; padding: 20px;
background: var(--card-bg); border: 1px solid #333;
box-shadow: 0 0 20px rgba(0,0,0,0.5);
transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
display: none; pointer-events: auto;
}
.card.active { display: block; animation: pop 0.4s ease-out forwards; }
/* Quand l'Axolotl arrive, on les pousse sur les côtés */
.card.pushed-left { transform: translateX(-120vw) rotate(-20deg) !important; opacity: 0; }
.card.pushed-right { transform: translateX(120vw) rotate(20deg) !important; opacity: 0; }
@keyframes pop {
0% { transform: scale(0.5) translateZ(-200px); opacity: 0; }
100% { transform: scale(1) translateZ(0) rotate(var(--r)); opacity: 1; }
}
/* --- DESIGN DES CARTES --- */
h2 {
font-family: 'Orbitron', sans-serif; font-size: 1.2rem; margin: 0 0 10px 0;
color: var(--cyan); border-bottom: 1px solid var(--cyan); padding-bottom: 5px;
}
.terminal-text {
font-family: 'VT323', monospace; font-size: 1.1rem; color: #888;
height: 60px; overflow: hidden; line-height: 1.1; margin-top: 10px;
}
/* --- AXOLOTL DIVE --- */
#axo-reset {
position: fixed; inset: 0; background: #fff; color: #000;
display: none; flex-direction: column; justify-content: center;
align-items: center; z-index: 500;
}
#axo-reset.active { display: flex; animation: flash 0.3s alternate 2; }
@keyframes flash { from { opacity: 0; } to { opacity: 1; } }
#hud {
position: fixed; top: 20px; left: 20px; font-family: 'VT323';
font-size: 1.5rem; color: var(--cyan); z-index: 2000;
}
</style>
</head>
<body>
<div id="laser"></div>
<canvas id="grid"></canvas>
<div id="hud">[ SIGNAL_BREACH_LOADED ]</div>
<div id="desk">
<div class="card" id="c0" style="--r: -3deg; top: 10%; left: 8%;">
<h2>01_PILIER_CIDA</h2>
<p>Confidentialité / Intégrité / Authentification / Dispo.</p>
<div class="terminal-text">INIT_DECRYPT... OK<br>CHECKING_CIDA_COMPLIANCE...<br>CORE_STATUS: VERIFIED</div>
</div>
<div class="card" id="c1" style="--r: 2deg; top: 15%; left: 55%;">
<h2>02_HISTOIRE_CLAIR</h2>
<p>SMTP (1982) & SMS (1992). Transit en clair via serveurs tiers. Risque de lecture opérateur massif.</p>
<div class="terminal-text">SNIFFING_SMS_TRAFFIC...<br>PACKET_LOSS: 0%<br>ENCRYPTION: NONE</div>
</div>
<div class="card" id="c2" style="--r: -4deg; top: 48%; left: 12%;">
<h2>03_FAIL_LEGACY</h2>
<p>PGP: Pas de PFS (Forward Secrecy).<br>OTR: Synchrone (Pas de mobile).</p>
<div class="terminal-text">ERROR: STATIC_KEY_DETECTED<br>ERROR: SYNC_HANDSHAKE_FAILED</div>
</div>
<div class="card" id="c3" style="--r: 3deg; top: 45%; left: 58%;">
<h2>04_SIGNAL_STD</h2>
<p>X3DH (Pre-keys) + Double Ratchet.<br>Nouvelle clé par message. PFS total.</p>
<div class="terminal-text">RATCHET_ROTATION_START...<br>KEY_DERIVATION: AES-256-GCM<br>STATUS: UNBREAKABLE</div>
</div>
<div class="card" id="c4" style="--r: -1deg; top: 20%; left: 32%;">
<h2 style="color:var(--alert)">05_VULNERABILITES</h2>
<p>> Post-Quantique (Shor's Algorithm)<br>> Infection Endpoints (Pegasus)<br>> MitM (Keys Validation)</p>
</div>
<div class="card" id="c5" style="--r: 5deg; top: 55%; left: 35%;">
<h2>06_SOUVERAINETÉ</h2>
<p>Discord (Centralisé/US) vs Matrix (Fédéré/Tchap/Souverain).</p>
<div class="terminal-text">MAPPING_NODES...<br>FEDERATION: ACTIVE<br>SOVEREIGNTY_LEVEL: 100%</div>
</div>
</div>
<div id="axo-reset">
<div style="font-size: 10rem;">🦦</div>
<h1 style="font-family: 'Orbitron'; letter-spacing: 5px;">AXOLOTL_ENGINE</h1>
<p>[ DÉMONSTRATION TECHNIQUE AU TABLEAU ]</p>
</div>
<script>
// --- PETIT FOND DE GRILLE DYNAMIQUE ---
const c = document.getElementById('grid');
const ctx = c.getContext('2d');
c.width = window.innerWidth; c.height = window.innerHeight;
function drawGrid() {
ctx.clearRect(0,0,c.width,c.height);
ctx.strokeStyle = "#111";
for(let x=0; x<c.width; x+=40) { ctx.beginPath(); ctx.moveTo(x,0); ctx.lineTo(x,c.height); ctx.stroke(); }
for(let y=0; y<c.height; y+=40) { ctx.beginPath(); ctx.moveTo(0,y); ctx.lineTo(c.width,y); ctx.stroke(); }
}
drawGrid();
// --- NAVIGATION ---
let step = 0;
const cards = document.querySelectorAll('.card');
const axo = document.getElementById('axo-reset');
function next() {
if(step < 4) {
cards[step].classList.add('active');
step++;
}
else if(step === 4) {
// ON POUSSE TOUT
cards[0].classList.add('pushed-left');
cards[1].classList.add('pushed-right');
cards[2].classList.add('pushed-left');
cards[3].classList.add('pushed-right');
setTimeout(() => { axo.classList.add('active'); }, 300);
step++;
}
else if(step === 5) {
// ON RAMENE TOUT ET ON ENLEVE L'AXO
axo.classList.remove('active');
cards.forEach(c => { c.classList.remove('pushed-left', 'pushed-right'); });
step++;
}
else if(step > 5 && step < 8) {
cards[step-2].classList.add('active');
cards[step-2].style.zIndex = 100 + step;
step++;
}
}
window.addEventListener('keydown', e => {
if(e.key === 'ArrowRight' || e.key === ' ') next();
if(e.key === 'Escape') location.reload();
});
</script>
</body>
</html>