|
1200 | 1200 | "altText": "Future blockchain security research" |
1201 | 1201 | } |
1202 | 1202 | ] |
| 1203 | + }, |
| 1204 | + { |
| 1205 | + "id": "wormhole-attack", |
| 1206 | + "title": "Wormhole Attack", |
| 1207 | + "description": "How two colluding nodes in the Lightning Network can steal routing fees by bypassing intermediate nodes using the HTLC pre-image", |
| 1208 | + "category": "Lightning Network", |
| 1209 | + "difficulty": "Intermediate", |
| 1210 | + "slideCount": 4, |
| 1211 | + "tags": ["lightning", "htlc", "routing", "attack", "security", "ptlc"], |
| 1212 | + "lastUpdated": "2026-02-24", |
| 1213 | + "slides": [ |
| 1214 | + { |
| 1215 | + "id": "slide-1", |
| 1216 | + "title": "Wormhole Attack Introduction", |
| 1217 | + "description": "Overview of the wormhole attack: two colluding nodes that steal routing fees in the Lightning Network", |
| 1218 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/wormhole-attack/slide-1.png", |
| 1219 | + "altText": "Wormhole attack introduction with A to E node diagram" |
| 1220 | + }, |
| 1221 | + { |
| 1222 | + "id": "slide-2", |
| 1223 | + "title": "Normal Payment Routing", |
| 1224 | + "description": "How a normal Lightning payment is routed through intermediate nodes using HTLCs", |
| 1225 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/wormhole-attack/slide-2.png", |
| 1226 | + "altText": "Normal HTLC payment routing from A to E through B, C, D" |
| 1227 | + }, |
| 1228 | + { |
| 1229 | + "id": "slide-3", |
| 1230 | + "title": "The Attack: Pre-image Theft", |
| 1231 | + "description": "How malicious nodes B and D bypass C by sharing the pre-image out-of-band, leaving C unpaid", |
| 1232 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/wormhole-attack/slide-3.png", |
| 1233 | + "altText": "B and D share pre-image bypassing C to steal routing fees" |
| 1234 | + }, |
| 1235 | + { |
| 1236 | + "id": "slide-4", |
| 1237 | + "title": "Mitigation: PTLC", |
| 1238 | + "description": "How Point-Time-Locked Contracts (PTLCs) prevent the wormhole attack", |
| 1239 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/wormhole-attack/slide-4.png", |
| 1240 | + "altText": "PTLC mitigation strategy for wormhole attack" |
| 1241 | + } |
| 1242 | + ] |
| 1243 | + }, |
| 1244 | + { |
| 1245 | + "id": "coinjoin", |
| 1246 | + "title": "CoinJoin", |
| 1247 | + "description": "How CoinJoin combines multiple Bitcoin transactions into one to enhance privacy by obscuring the link between inputs and outputs", |
| 1248 | + "category": "Privacy", |
| 1249 | + "difficulty": "Beginner", |
| 1250 | + "slideCount": 4, |
| 1251 | + "tags": ["coinjoin", "privacy", "mixing", "transactions", "anonymity"], |
| 1252 | + "lastUpdated": "2026-02-24", |
| 1253 | + "slides": [ |
| 1254 | + { |
| 1255 | + "id": "slide-1", |
| 1256 | + "title": "CoinJoin Introduction", |
| 1257 | + "description": "Introduction to CoinJoin and why Bitcoin transaction privacy matters", |
| 1258 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/coinjoin/slide-1.png", |
| 1259 | + "altText": "CoinJoin introduction slide" |
| 1260 | + }, |
| 1261 | + { |
| 1262 | + "id": "slide-2", |
| 1263 | + "title": "How CoinJoin Works", |
| 1264 | + "description": "How multiple participants combine their transactions into a single transaction", |
| 1265 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/coinjoin/slide-2.png", |
| 1266 | + "altText": "CoinJoin transaction combining diagram" |
| 1267 | + }, |
| 1268 | + { |
| 1269 | + "id": "slide-3", |
| 1270 | + "title": "Privacy Benefits", |
| 1271 | + "description": "The privacy benefits of CoinJoin and how it breaks transaction graph analysis", |
| 1272 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/coinjoin/slide-3.png", |
| 1273 | + "altText": "CoinJoin privacy benefits" |
| 1274 | + }, |
| 1275 | + { |
| 1276 | + "id": "slide-4", |
| 1277 | + "title": "CoinJoin Implementations", |
| 1278 | + "description": "Real-world CoinJoin implementations and their trade-offs", |
| 1279 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/coinjoin/slide-4.png", |
| 1280 | + "altText": "CoinJoin implementations overview" |
| 1281 | + } |
| 1282 | + ] |
| 1283 | + }, |
| 1284 | + { |
| 1285 | + "id": "full-node", |
| 1286 | + "title": "Full Node", |
| 1287 | + "description": "What a Bitcoin full node is, why it matters, and how it enforces the rules of the Bitcoin network without trusting anyone", |
| 1288 | + "category": "Bitcoin Basics", |
| 1289 | + "difficulty": "Beginner", |
| 1290 | + "slideCount": 5, |
| 1291 | + "tags": ["full-node", "validation", "consensus", "decentralization", "trust"], |
| 1292 | + "lastUpdated": "2026-02-24", |
| 1293 | + "slides": [ |
| 1294 | + { |
| 1295 | + "id": "slide-1", |
| 1296 | + "title": "What is a Full Node?", |
| 1297 | + "description": "Introduction to Bitcoin full nodes and their role in the network", |
| 1298 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/full-node/slide-1.png", |
| 1299 | + "altText": "Full node introduction" |
| 1300 | + }, |
| 1301 | + { |
| 1302 | + "id": "slide-2", |
| 1303 | + "title": "What a Full Node Does", |
| 1304 | + "description": "How a full node downloads, validates, and stores the entire Bitcoin blockchain", |
| 1305 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/full-node/slide-2.png", |
| 1306 | + "altText": "Full node downloading and validating the blockchain" |
| 1307 | + }, |
| 1308 | + { |
| 1309 | + "id": "slide-3", |
| 1310 | + "title": "Why Run a Full Node?", |
| 1311 | + "description": "The benefits of running your own full node: trustless verification and network contribution", |
| 1312 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/full-node/slide-3.png", |
| 1313 | + "altText": "Benefits of running a full node" |
| 1314 | + }, |
| 1315 | + { |
| 1316 | + "id": "slide-4", |
| 1317 | + "title": "Full Node vs SPV", |
| 1318 | + "description": "Comparing full nodes to lightweight SPV clients and the trust trade-offs", |
| 1319 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/full-node/slide-4.png", |
| 1320 | + "altText": "Full node vs SPV comparison" |
| 1321 | + }, |
| 1322 | + { |
| 1323 | + "id": "slide-5", |
| 1324 | + "title": "Running a Full Node", |
| 1325 | + "description": "Requirements and options for running your own Bitcoin full node", |
| 1326 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/full-node/slide-5.png", |
| 1327 | + "altText": "How to run a Bitcoin full node" |
| 1328 | + } |
| 1329 | + ] |
| 1330 | + }, |
| 1331 | + { |
| 1332 | + "id": "sha256-message-schedule", |
| 1333 | + "title": "SHA256 Message Schedule", |
| 1334 | + "description": "A deep dive into the SHA256 message schedule — how the 16 input words are expanded into 64 words used in the compression function", |
| 1335 | + "category": "Cryptography", |
| 1336 | + "difficulty": "Advanced", |
| 1337 | + "slideCount": 9, |
| 1338 | + "tags": ["sha256", "hashing", "cryptography", "message-schedule", "bitcoin-mining"], |
| 1339 | + "lastUpdated": "2026-02-24", |
| 1340 | + "slides": [ |
| 1341 | + { |
| 1342 | + "id": "slide-1", |
| 1343 | + "title": "SHA256 Overview", |
| 1344 | + "description": "Introduction to SHA256 and its role in Bitcoin", |
| 1345 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-1.png", |
| 1346 | + "altText": "SHA256 overview" |
| 1347 | + }, |
| 1348 | + { |
| 1349 | + "id": "slide-2", |
| 1350 | + "title": "Input Preparation", |
| 1351 | + "description": "How the input message is prepared and split into 512-bit blocks", |
| 1352 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-2.png", |
| 1353 | + "altText": "SHA256 input preparation" |
| 1354 | + }, |
| 1355 | + { |
| 1356 | + "id": "slide-3", |
| 1357 | + "title": "The 16 Initial Words", |
| 1358 | + "description": "How the 512-bit block is divided into 16 32-bit words (W0–W15)", |
| 1359 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-3.png", |
| 1360 | + "altText": "SHA256 initial 16 words" |
| 1361 | + }, |
| 1362 | + { |
| 1363 | + "id": "slide-4", |
| 1364 | + "title": "Word Expansion", |
| 1365 | + "description": "The formula for expanding W0–W15 into W16–W63", |
| 1366 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-4.png", |
| 1367 | + "altText": "SHA256 word expansion formula" |
| 1368 | + }, |
| 1369 | + { |
| 1370 | + "id": "slide-5", |
| 1371 | + "title": "Sigma Functions", |
| 1372 | + "description": "The sigma0 and sigma1 bitwise rotation and shift functions used in expansion", |
| 1373 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-5.png", |
| 1374 | + "altText": "SHA256 sigma functions" |
| 1375 | + }, |
| 1376 | + { |
| 1377 | + "id": "slide-6", |
| 1378 | + "title": "Full 64-Word Schedule", |
| 1379 | + "description": "The complete 64-word message schedule ready for the compression rounds", |
| 1380 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-6.png", |
| 1381 | + "altText": "SHA256 full 64-word message schedule" |
| 1382 | + }, |
| 1383 | + { |
| 1384 | + "id": "slide-7", |
| 1385 | + "title": "Compression Function Link", |
| 1386 | + "description": "How the message schedule feeds into the SHA256 compression function", |
| 1387 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-7.png", |
| 1388 | + "altText": "SHA256 message schedule feeding compression function" |
| 1389 | + }, |
| 1390 | + { |
| 1391 | + "id": "slide-8", |
| 1392 | + "title": "Why Message Expansion Matters", |
| 1393 | + "description": "The security rationale behind expanding 16 words to 64", |
| 1394 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-8.png", |
| 1395 | + "altText": "Why SHA256 message expansion matters for security" |
| 1396 | + }, |
| 1397 | + { |
| 1398 | + "id": "slide-9", |
| 1399 | + "title": "Summary", |
| 1400 | + "description": "Summary of the SHA256 message schedule and key takeaways", |
| 1401 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-9.png", |
| 1402 | + "altText": "SHA256 message schedule summary" |
| 1403 | + } |
| 1404 | + ] |
| 1405 | + }, |
| 1406 | + { |
| 1407 | + "id": "sha256-padding", |
| 1408 | + "title": "SHA256 Padding", |
| 1409 | + "description": "How SHA256 pads messages to a multiple of 512 bits before hashing, including the length encoding", |
| 1410 | + "category": "Cryptography", |
| 1411 | + "difficulty": "Advanced", |
| 1412 | + "slideCount": 6, |
| 1413 | + "tags": ["sha256", "hashing", "cryptography", "padding", "merkle-damgard"], |
| 1414 | + "lastUpdated": "2026-02-24", |
| 1415 | + "slides": [ |
| 1416 | + { |
| 1417 | + "id": "slide-1", |
| 1418 | + "title": "Why Padding is Needed", |
| 1419 | + "description": "Why SHA256 requires messages to be padded to a multiple of 512 bits", |
| 1420 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-padding/slide-1.png", |
| 1421 | + "altText": "SHA256 padding introduction" |
| 1422 | + }, |
| 1423 | + { |
| 1424 | + "id": "slide-2", |
| 1425 | + "title": "Step 1: Append a 1 Bit", |
| 1426 | + "description": "The first step of SHA256 padding: appending a single 1 bit after the message", |
| 1427 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-padding/slide-2.png", |
| 1428 | + "altText": "SHA256 padding step 1 append 1 bit" |
| 1429 | + }, |
| 1430 | + { |
| 1431 | + "id": "slide-3", |
| 1432 | + "title": "Step 2: Append Zero Bits", |
| 1433 | + "description": "Padding with zeros until the message length is 448 mod 512", |
| 1434 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-padding/slide-3.png", |
| 1435 | + "altText": "SHA256 padding step 2 zero bits" |
| 1436 | + }, |
| 1437 | + { |
| 1438 | + "id": "slide-4", |
| 1439 | + "title": "Step 3: Append Message Length", |
| 1440 | + "description": "Appending the original message length as a 64-bit big-endian integer", |
| 1441 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-padding/slide-4.png", |
| 1442 | + "altText": "SHA256 padding step 3 message length" |
| 1443 | + }, |
| 1444 | + { |
| 1445 | + "id": "slide-5", |
| 1446 | + "title": "Complete Padded Block", |
| 1447 | + "description": "The final padded 512-bit block ready for SHA256 processing", |
| 1448 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-padding/slide-5.png", |
| 1449 | + "altText": "SHA256 complete padded block" |
| 1450 | + }, |
| 1451 | + { |
| 1452 | + "id": "slide-6", |
| 1453 | + "title": "Summary", |
| 1454 | + "description": "Summary of the SHA256 padding scheme and why it prevents length extension attacks", |
| 1455 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-padding/slide-6.png", |
| 1456 | + "altText": "SHA256 padding summary" |
| 1457 | + } |
| 1458 | + ] |
| 1459 | + }, |
| 1460 | + { |
| 1461 | + "id": "tx-pinning", |
| 1462 | + "title": "Transaction Pinning", |
| 1463 | + "description": "How transaction pinning attacks exploit mempool rules to prevent fee bumping, and why this matters for Lightning Network security", |
| 1464 | + "category": "Security", |
| 1465 | + "difficulty": "Advanced", |
| 1466 | + "slideCount": 4, |
| 1467 | + "tags": ["tx-pinning", "mempool", "lightning", "rbf", "cpfp", "security", "fees"], |
| 1468 | + "lastUpdated": "2026-02-24", |
| 1469 | + "slides": [ |
| 1470 | + { |
| 1471 | + "id": "slide-1", |
| 1472 | + "title": "Transaction Pinning Introduction", |
| 1473 | + "description": "What transaction pinning is and why it's a concern for time-sensitive Bitcoin protocols", |
| 1474 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/tx-pinning/slide-1.png", |
| 1475 | + "altText": "Transaction pinning introduction" |
| 1476 | + }, |
| 1477 | + { |
| 1478 | + "id": "slide-2", |
| 1479 | + "title": "How Pinning Works", |
| 1480 | + "description": "How an attacker exploits mempool policy rules (RBF, CPFP limits) to pin a transaction", |
| 1481 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/tx-pinning/slide-2.png", |
| 1482 | + "altText": "Transaction pinning attack mechanism" |
| 1483 | + }, |
| 1484 | + { |
| 1485 | + "id": "slide-3", |
| 1486 | + "title": "Impact on Lightning Network", |
| 1487 | + "description": "Why transaction pinning is especially dangerous for Lightning channel closures and HTLCs", |
| 1488 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/tx-pinning/slide-3.png", |
| 1489 | + "altText": "Transaction pinning impact on Lightning Network" |
| 1490 | + }, |
| 1491 | + { |
| 1492 | + "id": "slide-4", |
| 1493 | + "title": "Mitigations", |
| 1494 | + "description": "Proposed and deployed mitigations including package relay and v3 transactions", |
| 1495 | + "imageUrl": "/decoding-bitcoin/static/explainers/images/tx-pinning/slide-4.png", |
| 1496 | + "altText": "Transaction pinning mitigations" |
| 1497 | + } |
| 1498 | + ] |
1203 | 1499 | } |
1204 | 1500 | ] |
0 commit comments