Repository navigation
Meteor Web 4.0 - The Quantum-Resistant Decentralized Internet
The complete infrastructure for Web 4.0: a serverless, censorship-resistant, quantum-secure internet built on 32 bytes.
MeteorID (32 bytes)
├→ Meteor-NC (quantum-resistant encryption)
└→ Ed25519 → PeerID (libp2p identity)
├→ Kademlia DHT (peer discovery)
├→ GossipSub PubSub (broadcast)
├→ libp2p Stream (direct P2P)
└→ IPFS (distributed storage)
Key Insight: A single 32-byte seed provides:
- Quantum-resistant encryption capability
- Network identity (PeerID)
- Discovery mechanism (DHT key)
- Storage access (IPFS)
One identity. Everything connected.
- Protocol:
/meteor/1.0.0stream protocol - NAT Traversal: AutoNAT, hole punching, relay support
- Transport: TCP, QUIC, WebSocket, WebRTC
- Security: Built-in TLS 1.3 + Meteor-NC quantum layer
- Peer Discovery: Find any peer by MeteorID alone
- Decentralized: No central directory server
- Scalable: O(log n) lookup complexity
- Bootstrap: Connect to any known node to join network
- Topic-Based: Subscribe to channels, receive broadcasts
- Decentralized: No message broker required
- Efficient: Gossip protocol minimizes redundant messages
- Censorship-Resistant: No single point of control
- Distributed Storage: Files stored across network
- Content Addressing: CID-based retrieval (immutable)
- Encrypted: All files encrypted with Meteor-NC before upload
- Zero Hosting Cost: No servers, no bandwidth fees
- Simple API:
encrypt_string()/decrypt_string() - File Support:
encrypt_file()/decrypt_file() - Streaming: Large file support with chunked processing
- Performance: 1.9M msg/s on A100 GPU
┌─────────────────────────────────────────────────────────────┐
│ Security Layers │
├─────────────────────────────────────────────────────────────┤
│ Layer 4: Application │ Meteor-NC encryption (quantum) │
│ Layer 3: Transport │ libp2p TLS 1.3 + Noise │
│ Layer 2: Network │ DHT privacy (onion-like routing) │
│ Layer 1: Storage │ IPFS encryption (at-rest) │
└─────────────────────────────────────────────────────────────┘
Defense in Depth:
- Quantum Layer: Meteor-NC protects against future quantum computers
- Transport Layer: TLS 1.3 protects current connections
- Network Layer: DHT provides discovery without central authority
- Storage Layer: Encrypted before upload to IPFS
# Deterministic 1-to-1 mapping
meteor_id = SHA256("METEOR_ID_v1" || seed) # 32 bytes
ed25519_seed = SHA256("ED25519" || meteor_id) # 32 bytes
private_key = Ed25519.from_seed(ed25519_seed)
public_key = private_key.public_key()
peer_id = Base58(Multihash(public_key)) # 12D3Koo...
# MeteorID → DHT lookup key
dht_key = SHA256(meteor_id) # Used for Kademlia routing
{
"type": "text",
"sender_id": "80c984bf1fb5952788869d13d4eb46fc...",
"recipient_id": "6b2612a907be8d049744b4dcae4d7f34...",
"timestamp": 1732757400.123,
"ciphertext": "base64_encoded_encrypted_data...",
"original_len": 13,
"signature": "ed25519_signature_hex..."
}numpy- Numerical operationsasyncio- Async I/O (stdlib)
pynacl- Ed25519 signatures (fallback: HMAC-SHA256)libp2p- P2P networking (fallback: mock mode)ipfshttpclient- IPFS client (fallback: disabled)multiaddr- Address parsing (fallback: string-based)
import asyncio
from meteor_web4_complete import MeteorWeb4Nodeasync def main():
# Create two nodes
alice = await MeteorWeb4Node.create("Alice")
bob = await MeteorWeb4Node.create("Bob")<span class="pl-c" style="box-sizing: border-box; color: rgb(145, 152, 161);"># Start services</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(255, 123, 114);">await</span> <span class="pl-s1" style="box-sizing: border-box;">alice</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">start</span>(<span class="pl-s1" style="box-sizing: border-box;">port</span><span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">=</span><span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">9000</span>) <span class="pl-k" style="box-sizing: border-box; color: rgb(255, 123, 114);">await</span> <span class="pl-s1" style="box-sizing: border-box;">bob</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">start</span>(<span class="pl-s1" style="box-sizing: border-box;">port</span><span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">=</span><span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">9001</span>) <span class="pl-c" style="box-sizing: border-box; color: rgb(145, 152, 161);"># Exchange identities (in real network: use DHT)</span> <span class="pl-s1" style="box-sizing: border-box;">alice</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">add_peer</span>(<span class="pl-s" style="box-sizing: border-box; color: rgb(165, 214, 255);">"Bob"</span>, <span class="pl-s1" style="box-sizing: border-box;">bob</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">meteor_id</span>, <span class="pl-s1" style="box-sizing: border-box;">bob</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">p2p</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">listen_addrs</span>) <span class="pl-s1" style="box-sizing: border-box;">bob</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">add_peer</span>(<span class="pl-s" style="box-sizing: border-box; color: rgb(165, 214, 255);">"Alice"</span>, <span class="pl-s1" style="box-sizing: border-box;">alice</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">meteor_id</span>, <span class="pl-s1" style="box-sizing: border-box;">alice</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">p2p</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">listen_addrs</span>) <span class="pl-c" style="box-sizing: border-box; color: rgb(145, 152, 161);"># Send encrypted message</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(255, 123, 114);">await</span> <span class="pl-s1" style="box-sizing: border-box;">alice</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">send_text</span>(<span class="pl-s" style="box-sizing: border-box; color: rgb(165, 214, 255);">"Bob"</span>, <span class="pl-s" style="box-sizing: border-box; color: rgb(165, 214, 255);">"Hello, quantum-resistant world!"</span>) <span class="pl-c" style="box-sizing: border-box; color: rgb(145, 152, 161);"># Cleanup</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(255, 123, 114);">await</span> <span class="pl-s1" style="box-sizing: border-box;">alice</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">stop</span>() <span class="pl-k" style="box-sizing: border-box; color: rgb(255, 123, 114);">await</span> <span class="pl-s1" style="box-sizing: border-box;">bob</span>.<span class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);">stop</span>()asyncio.run(main())
from meteor_web4_complete import MeteorWeb4Node
async def main():
# Create two nodes
alice = await MeteorWeb4Node.create("Alice")
bob = await MeteorWeb4Node.create("Bob")
# Start services
await alice.start(port=9000)
await bob.start(port=9001)
# Exchange identities (in real network: use DHT)
alice.add_peer("Bob", bob.meteor_id, bob.p2p.listen_addrs)
bob.add_peer("Alice", alice.meteor_id, alice.p2p.listen_addrs)
# Send encrypted message
await alice.send_text("Bob", "Hello, quantum-resistant world!")
# Cleanup
await alice.stop()
await bob.stop()
asyncio.run(main())" tabindex="0" role="button" style="box-sizing: border-box; position: relative; display: flex !important; padding: 0px !important; font-size: 14px; font-weight: 500; line-height: 20px; white-space: nowrap; vertical-align: middle; cursor: pointer; user-select: none; border: 0px; border-radius: 6px; appearance: none; color: rgb(68, 147, 248); background-color: rgba(0, 0, 0, 0); box-shadow: none; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; justify-content: center !important; align-items: center !important; margin: 8px !important; width: 28px; height: 28px;">
"地政学をなくす" - Eliminating geopolitics through technology
When everyone has access to unbreakable encryption, when no nation can control the flow of information, when resources like superconductors don't require rare materials, the playing field becomes level.
That's the world we're building.
— Masamichi & Tamaki, 2025