Cryptographically signed AI tool responses for preventing hallucinations
Project description
TrustChain v2.1
Cryptographic verification layer for AI agents - "SSL for AI"
TrustChain adds Ed25519 cryptographic signatures to AI tool responses, enabling:
- Proof of execution - data came from a real tool, not hallucinated
- Chain of Trust - cryptographically linked operation sequences
- Replay attack protection - nonce-based anti-replay
- Key rotation - seamless key management with persistence
- Audit trails - beautiful HTML reports for compliance
- Integrations - OpenAI, Anthropic, LangChain, MCP (Claude Desktop)
Installation
pip install trustchain
Optional extras:
pip install trustchain[integrations] # LangChain + MCP support
pip install trustchain[ai] # OpenAI + Anthropic + LangChain
pip install trustchain[mcp] # MCP Server only
pip install trustchain[redis] # Distributed nonce storage
pip install trustchain[all] # Everything
Quick Start
from trustchain import TrustChain
tc = TrustChain()
@tc.tool("weather")
def get_weather(city: str) -> dict:
return {"city": city, "temp": 22}
# Calling the function returns a SignedResponse
result = get_weather("Moscow")
print(result.data) # {'city': 'Moscow', 'temp': 22}
print(result.signature) # Ed25519 signature (Base64)
# Verify authenticity
assert tc.verify(result) == True
Features
Chain of Trust
Link operations cryptographically to prove execution order:
step1 = tc._signer.sign("search", {"query": "balance"})
step2 = tc._signer.sign("analyze", {"result": 100}, parent_signature=step1.signature)
step3 = tc._signer.sign("report", {"text": "Done"}, parent_signature=step2.signature)
# Verify the entire chain
assert tc.verify_chain([step1, step2, step3]) == True
Key Management
from trustchain import TrustChain, TrustChainConfig
# Persistent keys with auto-save
tc = TrustChain(TrustChainConfig(
key_file="keys.json",
enable_nonce=True
))
tc.save_keys()
# Key rotation (generates new keys)
old_key = tc.get_key_id()
new_key = tc.rotate_keys() # Also saves if key_file is configured
print(f"Rotated from {old_key[:16]} to {new_key[:16]}")
# Export for external verification
public_key = tc.export_public_key()
Multi-Tenant (Agent Isolation)
from trustchain.v2.tenants import TenantManager
manager = TenantManager()
research_agent = manager.get_or_create("research_agent")
code_agent = manager.get_or_create("code_agent")
# Each agent has isolated keys - cannot verify each other's signatures
result = research_agent._signer.sign("data", {"value": 42})
assert research_agent.verify(result) == True
assert code_agent.verify(result) == False # Different keys!
OpenAI / Anthropic Schema Export
# Get OpenAI-compatible function schema
schema = tc.get_tools_schema()
# Anthropic format
schema = tc.get_tools_schema(format="anthropic")
MCP Server (Claude Desktop)
from trustchain.integrations.mcp import serve_mcp
@tc.tool("calculator")
def add(a: int, b: int) -> int:
return a + b
serve_mcp(tc) # Starts MCP server for Claude Desktop
LangChain Integration
from trustchain.integrations.langchain import to_langchain_tools
lc_tools = to_langchain_tools(tc)
# Use with LangChain AgentExecutor
Merkle Trees for Large Documents
from trustchain.v2.merkle import MerkleTree, verify_proof
pages = ["Page 1...", "Page 2...", ...]
tree = MerkleTree.from_chunks(pages)
# Verify single page without loading entire document
proof = tree.get_proof(42)
assert verify_proof(pages[42], proof, tree.root)
CloudEvents Format
from trustchain.v2.events import TrustEvent
event = TrustEvent.from_signed_response(result, source="/agent/bot")
kafka_headers = event.to_kafka_headers()
Audit Trail UI
from trustchain.ui.explorer import ChainExplorer
explorer = ChainExplorer(chain, tc)
explorer.export_html("audit_report.html")
# Export formats
json_data = explorer.to_json() # Returns list of responses
stats = explorer.get_stats() # Summary statistics
Performance
| Operation | Latency | Throughput |
|---|---|---|
| Sign | 0.11 ms | 9,100 ops/sec |
| Verify | 0.22 ms | 4,500 ops/sec |
| Merkle (100 pages) | 0.18 ms | 5,400 ops/sec |
Storage overhead: ~124 bytes per operation.
Interactive Examples
See the examples/ directory:
| Notebook | Description |
|---|---|
| trustchain_tutorial.ipynb | Basic tutorial - 7 core use cases |
| trustchain_advanced.ipynb | Advanced - key persistence, multi-agent, Redis |
| trustchain_pro.ipynb | Full API reference with all v2.1 capabilities |
Python examples:
mcp_claude_desktop.py- MCP Server for Claudelangchain_agent.py- LangChain integrationsecure_rag.py- RAG with Merkle verificationdatabase_agent.py- SQL with Chain of Trustapi_agent.py- HTTP client with CloudEvents
Architecture
trustchain/
v2/
core.py # Main TrustChain class
signer.py # Ed25519 signatures
schemas.py # OpenAI/Anthropic schema generation
merkle.py # Merkle tree implementation
events.py # CloudEvents format
tenants.py # Multi-tenant isolation
nonce_storage.py # Memory/Redis nonce storage
server.py # REST API
integrations/
langchain.py # LangChain adapter
mcp.py # MCP Server
ui/
explorer.py # HTML audit reports
Use Cases
| Industry | Application |
|---|---|
| AI Agents | Prove tool outputs are real, not hallucinations |
| FinTech | Audit trail for financial operations |
| LegalTech | Document verification with Merkle proofs |
| Healthcare (HIPAA) | Compliant AI data handling |
| Enterprise | SOC2-ready AI deployments |
Documentation
- Russian Guide - Comprehensive documentation in Russian
- Roadmap - Development roadmap and status
- Architecture - Technical details
- GitHub Wiki - Full API reference
License
MIT
Author
Ed Cherednik
Version
2.1.0
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file trustchain-0.1.0.tar.gz.
File metadata
- Download URL: trustchain-0.1.0.tar.gz
- Upload date:
- Size: 125.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69b4cef74f0bea8860b15686816538b271198bf20e076847db0ba2dfb972348d
|
|
| MD5 |
f6c971adfb54b3903daabec939915199
|
|
| BLAKE2b-256 |
d0c9dac567f903f0e8473857d0700d111a552aea27f5e76bf72269f6ad7c9a09
|
Provenance
The following attestation bundles were made for trustchain-0.1.0.tar.gz:
Publisher:
publish.yml on petro1eum/trust_chain
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trustchain-0.1.0.tar.gz -
Subject digest:
69b4cef74f0bea8860b15686816538b271198bf20e076847db0ba2dfb972348d - Sigstore transparency entry: 835638778
- Sigstore integration time:
-
Permalink:
petro1eum/trust_chain@dba672f8653fb3792b6f81b5df6542773fe61247 -
Branch / Tag:
refs/tags/v2.1.0 - Owner: https://github.com/petro1eum
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@dba672f8653fb3792b6f81b5df6542773fe61247 -
Trigger Event:
push
-
Statement type:
File details
Details for the file trustchain-0.1.0-py3-none-any.whl.
File metadata
- Download URL: trustchain-0.1.0-py3-none-any.whl
- Upload date:
- Size: 125.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6939f3121a050a37c4c5463c7c9fc8329145c556deda18c41665ab7885383e67
|
|
| MD5 |
b097dda0632c534639d0e1c36c1f2d67
|
|
| BLAKE2b-256 |
5cac38890f60369b5901ab31b6d15fe756732a72702fbd74fcc67b1953213f43
|
Provenance
The following attestation bundles were made for trustchain-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on petro1eum/trust_chain
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trustchain-0.1.0-py3-none-any.whl -
Subject digest:
6939f3121a050a37c4c5463c7c9fc8329145c556deda18c41665ab7885383e67 - Sigstore transparency entry: 835638782
- Sigstore integration time:
-
Permalink:
petro1eum/trust_chain@dba672f8653fb3792b6f81b5df6542773fe61247 -
Branch / Tag:
refs/tags/v2.1.0 - Owner: https://github.com/petro1eum
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@dba672f8653fb3792b6f81b5df6542773fe61247 -
Trigger Event:
push
-
Statement type: