Submitted:
30 March 2026
Posted:
15 April 2026
You are already at the latest version
Abstract
Keywords:
1. Problem Statement
1.1. Contributions
- Shared-hosting deployment floor. We demonstrate that a complete cryptographic integrity stack is constructable and deployable on commodity shared-host PHP 7.4+ without native extensions, Composer dependencies, or root access—the first system to achieve this for tamper-evident publishing.
- Pure-PHP FIPS 205 SLH-DSA implementation. We present a complete, spec-compliant implementation of NIST FIPS 205 SLH-DSA (SHA2-128s parameter set) in pure PHP, enabling post-quantum signing on infrastructure where no prior implementation existed.
- Multi-anchor trust architecture. We define and analyse a seven-anchor trust model in which simultaneous compromise of all active anchors is required to deceive a verifier.
- Formal canonicalization specification. We provide a complete, normative specification of the canonical message construction such that any independent verifier can reconstruct and verify signatures without ArchivioMD-specific tooling.
- DSSE hybrid envelope correctness argument. We prove that a single DSSE envelope carrying simultaneous Ed25519 and SLH-DSA signatures is safe for Ed25519-only verifiers and provides cross-protocol replay resistance via PAE domain separation.
- Multi-signer threshold security analysis. We formalise the guarantees and limitations of configurable multi-party editorial signing workflows, including the collusion bound and the retrospective signing attack detection mechanism.
- Canary token keyspace analysis. We prove a ~2^198 combined subset keyspace for the semantic encoding layer and measure decode accuracy under four stripping conditions including human paraphrase.
- Scenario-adversary coverage mapping. We explicitly map each deployment scenario to the adversary classes it is protected against, making the threat model’s coverage concrete and auditable.
2. Deployment Contexts and Motivating Scenarios
2.1. Investigative Journalism
2.2. Academic and Scientific Research Publishing
2.3. Medical, Legal, and Compliance Publishing
2.4. AI-Generated Content Authentication
2.5. Infrastructure Scaling and Deployment Notes
3. System Model
3.1. Principals and Components
| Principal | Role |
|---|---|
| Publisher | WordPress site owner; controls plugin configuration and wp-config.php |
| Signer | Key holder who produces OpenPGP signatures over post content hashes |
| Verifier | Any third party who wishes to confirm content integrity |
| Hosting Provider | Entity controlling the server, database, and filesystem |
| DNS Operator | Entity controlling the authoritative DNS zone |
| Git Repository | GitHub, GitLab (public/private/self-hosted), or equivalent |
| TSA | RFC 3161 Time Stamp Authority (FreeTSA, DigiCert, GlobalSign, Sectigo) |
| Rekor | Sigstore public append-only transparency log (Linux Foundation) |
| Key Server | keys.openpgp.org VKS or Web Key Directory (WKD) |
| Adversary | Defined in Section 4 |
3.2. System Architecture Overview
3.3. Trust Anchors
- 9.
- Ed25519 signing key: stored in wp-config.php. Public key at /.well-known/ed25519-pubkey.txt. Independently verifiable with any sodium-compatible tool.
- 10.
- SLH-DSA signing key: same storage model. Public key at /.well-known/slhdsa-pubkey.txt. Independently verifiable with any FIPS 205-compatible library (e.g., pyspx).
- 11.
- Git repository commit history: anchor records committed to GitHub or GitLab create an immutable, timestamped audit trail. Self-hosted GitLab provides a fully publisher-controlled registry.
- 12.
- Sigstore / Rekor transparency log: public append-only Merkle tree log operated by the Linux Foundation. Entries are immutable once committed and publicly verifiable by anyone.
- 13.
- RFC 3161 Trusted Timestamp: signed .tsr token from a commercial or public TSA, binding the content hash to a specific time independently verifiable offline with standard OpenSSL.
- 14.
- DANE / DNSSEC: all active signing keys published as DNSSEC-protected DNS TXT records in the amd1 format (modelled on DKIM/RFC 6376), providing a trust path entirely independent of the web server and TLS certificate.
- 15.
- OpenPGP identity signatures (ArchivioID): detached PGP signatures over the content hash, verified against public keys retrievable from keys.openpgp.org or WKD, and published at a stable public proof page.
3.4. Canonical Message
mdsm-ed25519-v1\n{post_id}\n{post_title}\n{post_slug}\n{stripped_content}\n{post_date_gmt}
3.4.1. Canonicalization Specification, Formal Definition
- 16.
- Field extraction. Extract post_id (integer), post_title (UTF-8 string), post_slug (URL slug), post_content (HTML), and post_date_gmt (MySQL datetime, UTC).
- 17.
- Content stripping. Apply PHP’s strip_tags() to post_content with no allowed tags, producing a plain-text representation. No additional whitespace normalisation.
- 18.
- Message assembly. Concatenate the fields with literal newline (0x0A) separators in the order shown above, prefixed with the version string mdsm-ed25519-v1.
- 19.
- Encoding. The canonical message is encoded as UTF-8 with no BOM. All string fields are used as-is from the database; no additional normalisation is applied.
- 20.
- DSSE wrapping (when applicable). When producing a DSSE envelope, apply PAE to the canonical message with payload type application/vnd.archiviomd.document before signing.
3.5. DSSE Hybrid Envelope
3.6. Anchoring Queue Architecture
- Mutex locking via a TTL-bounded wp_options lock prevents concurrent cron processes from double-submitting the same anchor record.
- Per-provider state tracking means each provider resolves independently—a rate-limited Rekor submission is retried with exponential backoff while a successful RFC 3161 submission is recorded as complete.
- Exponential backoff with per-provider retry counters and retry_after timestamps prevents thundering-herd behaviour against external APIs.
- Queue size cap bounds the maximum number of pending jobs, preventing unbounded wp_options growth.
- WP-CLI bypass (wp archiviomd process-queue) allows immediate queue processing outside the cron schedule.
3.7. ArchivioID: OpenPGP Identity and Multi-Signer Layer
3.7.1. Two Signing Methods
3.7.2. Trust Model Implications
3.7.3. Multi-Signer Workflows, Threshold Policy, and Security Analysis
3.7.4. Algorithm Enforcement Floor
3.7.5. Public Proof Pages
3.8. ECDSA P-256 Signing
- 21.
- X.509 certificate-backed ECDSA P-256 signatures are natively verifiable by tooling that does not support Ed25519 (Adobe Acrobat, Windows CertUtil, Java Bouncy Castle, enterprise DMS platforms).
- 22.
- In compliance frameworks referencing NIST SP 800-186 or FIPS 186-5, P-256 is an explicitly named approved curve relevant to FedRAMP, FISMA, HIPAA, and SOC 2 audit requirements.
- 23.
- Where the ECDSA key is backed by a certificate issued by an institutional PKI, the certificate chain provides an identity binding that a bare Ed25519 public key does not.
3.9. RSA Compatibility Signing
3.10. CMS/PKCS#7 Detached Signatures
# Method 1 -- OpenSSL
openssl smime -verify -inform DER \
-in signature.p7s \
-content canonical-message.txt \
-CAfile ca-chain.pem
# Method 2 -- Windows CertUtil
certutil -verify signature.p7s canonical-message.txt
3.11. JSON-LD/W3C Data Integrity
4. Adversary Model
4.1. Adversary Classes
4.1.1. A1: Hostile Infrastructure Operator
4.1.2. A2: Law Enforcement with Legal Compulsion
4.1.3. A3: State-Level Attacker with Network Access
4.1.4. A4: Compromised WordPress Admin Account
4.2. Scenario-Adversary Coverage Matrix
5. Protected Assets
5.1. Content Existence at a Specific Time
5.2. Content Integrity Since Publication
5.3. Signer Identity Binding
5.4. Forensic Evidence Integrity (Signed Evidence Package)
5.5. Source/Leaker Identity (Canary Tokens)
6. Explicit Non-Goals and Limitations
6.1. Pre-Signing Modification
6.2. wp-config.php Compromise (Key Theft)
6.3. WordPress Core and Plugin Vulnerabilities
6.4. Coercion of the Publisher
6.5. Prevention vs. Detection
6.6. Silent Anchoring Queue Failure
7. Security Properties, Formal Summary
| Property | Guarantee | Conditions |
|---|---|---|
| Temporal binding | Content hash bound to a specific time via multiple independent registries | At least one TSA issues honest TSR; Rekor not retroactively altered; Git commit unmodified |
| Hash authenticity | Stored hash cannot be forged by database-only adversary | HMAC mode enabled; HMAC key not exfiltrated from wp-config.php |
| Integrity detection | Post-publication modification is detectable | At least one of seven trust anchors uncompromised |
| Signer identity binding | Content hash bound to a named PGP identity | ArchivioID active; signing key not compromised; public key retrievable |
| Multi-party attestation | Content requires sign-off from N independent key holders | Threshold >= 2; no single key compromise satisfies the threshold |
| Key independence | Verification requires no trust in publisher’s web server | DNSSEC properly configured; verifier checks DANE |
| Quantum resistance | Signatures remain valid under post-quantum adversaries | SLH-DSA enabled; FIPS 205 hash-based security assumptions hold |
| Source attribution | Distribution event traceable to a specific served copy | HMAC key not compromised; at least two semantic channels active |
| Non-repudiation | Publisher cannot plausibly deny original content | Rekor entry publicly auditable; TSR, Git commit, and PGP signature preserved |
| Jurisdictional redundancy | No single legal jurisdiction controls all trust anchors | TSAs in multiple jurisdictions configured |
7.1. Novel Versus Inherited Properties
8. Design Rationale
8.1. Why WordPress? The Shared-Hosting Constraint as Specification
8.2. Deterministic opt_rand in SLH-DSA (FIPS 205 10.2)
$opt_rand = $pk_seed; // deterministic variant (FIPS 205, Sec. 10.2)
$r = $this->PRF_msg($sk_prf, $opt_rand, $msg);
8.3. Non-Constant-Time SLH-DSA
9. Feature Compatibility Matrix
- PHP 5.6-7.1: SHA-256 hashing + HMAC mode + SLH-DSA signing (pure-PHP) + RFC 3161 timestamps + Git anchoring. No Ed25519, no Rekor. This configuration provides temporal binding and a non-repudiation guarantee, meaningful protection against A1 and partial protection against A2.
- PHP 7.2+: Full stack available. Ed25519 + SLH-DSA hybrid signing + Rekor + RFC 3161 + Git anchoring + DANE. All six trust anchors active simultaneously.
- PHP 7.4+ (recommended): Full stack with BLAKE2b and SHA3 natively available, HKDF hardening enabled, optimal performance across all operations.
9.1. Regional Algorithm Availability: GOST R 34.11-94
10. Independent Verification Walkthrough
curl -s https://publisher.example.com/article-slug/ > article.html
cat article.html | python3 -c “
import sys, re, html
content = sys.stdin.read()
body = re.sub(r’<[^>]+>’, ‘’, content)
body = html.unescape(body).strip()
print(body[:200])
“
curl -s https://publisher.example.com/.well-known/ed25519-pubkey.txt > ed25519-pubkey.txt
dig +dnssec _archiviomd._domainkey.publisher.example.com TXT
# p= field in the TXT record should match the base64 of the hex-decoded public key.
HASH=$(sha256sum article-anchor.json | cut -d’ ‘ -f1)
| python3 -m json.tool
rekor-cli verify --artifact-hash sha256:$HASH --log-index LOG_INDEX
openssl ts -verify \
-in response.tsr \
-queryfile request.tsq \
-CAfile freetsa-ca.crt
# Expected output: Verification: OK
cd anchor-repo
grep -r ‘“post_id”: 42’ .
git log --follow -- anchors/post-42-*.json
import nacl.signing, nacl.encoding, base64, json
pubkey_hex = open(‘ed25519-pubkey.txt’).read().strip()
verify_key = nacl.signing.VerifyKey(bytes.fromhex(pubkey_hex))
post_id = 42
title = “Article Title”
slug = “article-slug”
content = open(‘stripped-content.txt’).read()
date_gmt = “2026-01-15 09:00:00”
canonical = f”mdsm-ed25519-v1\n{post_id}\n{title}\n{slug}\n{content}\n{date_gmt}”
sig_hex = “...” # from compliance export
try:
verify_key.verify(canonical.encode(‘utf-8’), bytes.fromhex(sig_hex))
print(“SIGNATURE VALID”)
except nacl.exceptions.BadSignatureError:
print(“SIGNATURE INVALID -- content has been modified since signing”)
10.1. What Failure Looks Like
11. Security Analysis
11.1. Canary Token Adversarial Robustness, Formal Keyspace Analysis
| Channel | Dict Size n | Active Subset k | Possible Subsets | Keyspace |
|---|---|---|---|---|
| Ch.5 Contractions | 57 | 40 | C(57,40) | ~47 bits |
| Ch.6 Synonyms | 83 | 58 | C(83,58) | ~70 bits |
| Ch.8 Spelling | 62 | 43 | C(62,43) | ~52 bits |
| Ch.9 Hyphenation | 35 | 24 | C(35,24) | ~29 bits |
| Combined | ~198 bits |
11.2. Residual Trust in the Rekor Operator
11.3. Residual Trust in the DNSSEC Infrastructure
11.4. Empirical Evaluation
11.4.1. Signing Latency
11.4.2. Anchoring Reliability and Queue Throughput
11.4.3. Canary Token Encode/Decode Accuracy
11.4.4. Browser Signing Latency (OpenPGP.js)
12. Comparison to Related Work
12.1. Certificate Transparency and Append-Only Log Architecture
12.2. SecureDrop and Source Protection Infrastructure
12.3. Sigstore, Cosign, and Software Artifact Signing
12.4. OpenPGP, Web of Trust, and Document Signing Ecosystems
12.5. SPHINCS+ / SLH-DSA and Post-Quantum Signature Schemes
12.6. Text Steganography and Watermarking
13. Discussion
13.1. Is 480ms SLH-DSA Signing Actually Deployable?
13.2. What Happens If the Sigstore Ecosystem Changes?
13.3. Future Work
14. Conclusion
References
- Bailey, S.R. (2026). ArchivioMD: Accessible Cryptographic Content Integrity for Independent Publishing Infrastructure [WordPress plugin, v1.5.9]. Mountain View Provisions LLC. https://github.com/MountainViewProvisions/archiviomd.
- Bailey, S.R. (2026). ArchivioID: OpenPGP Identity and Multi-Signer Verification Layer for ArchivioMD [WordPress plugin, v5.1.0]. Mountain View Provisions LLC. https://github.com/MountainViewProvisions/ArchivioID.
- Atallah, M.J., Raskin, V., Hempelmann, C.F., et al. (2002). Natural language watermarking and tamperproofing. In Proceedings of the 5th International Workshop on Information Hiding, LNCS 2578, pp. 196-212. Springer.
- Bernstein, D.J., Hulsing, A., Kolbl, S., et al. (2019). The SPHINCS+ signature framework. In Proceedings of ACM CCS 2019, pp. 2129-2146. ACM.
- Brassil, J.T., Low, S., Maxemchuk, N.F., and O’Gorman, L. (1995). Electronic marking and identification techniques to discourage document copying. IEEE Journal on Selected Areas in Communications, 13(8), 1495-1504. [CrossRef]
- Callas, J., Donnerhacke, L., Finney, H., Shaw, D., and Thayer, R. (2007). OpenPGP Message Format. RFC 4880. Internet Engineering Task Force.
- Fernandez, M., Torres-Arias, S., Diaz, C., and Kim, J. (2023). in-toto Attestation Framework. GitHub / in-toto Working Group.
- Laurie, B., Langley, A., and Kasper, E. (2013). Certificate Transparency. RFC 6962. Internet Engineering Task Force.
- Newman, Z., Meyers, J.S., and Torres-Arias, S. (2022). Sigstore: Software signing for everybody. In Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Security (CCS ‘22), pp. 2353-2367. ACM.
- NIST (2023). Recommendations for Discrete Logarithm-Based Cryptography: Elliptic Curve Domain Parameters. Special Publication 800-186.
- NIST (2024). Module-Lattice-Based Digital Signature Standard. Federal Information Processing Standard 204.
- NIST (2024). Stateless Hash-Based Digital Signature Standard. Federal Information Processing Standard 205.
- NIST (2023). Digital Signature Standard (DSS). Federal Information Processing Standard 186-5.
- Protz, T., et al. (2023). OpenPGP.js v5. OpenPGP.js Contributors. https://openpgpjs.org.
- Pletcher, L., Torres-Arias, S., Meyers, B., and Newman, Z. (2021). Rekor: Immutable tamper-resistant ledger of metadata generated within a software supply chain. Sigstore / Linux Foundation.
- Adams, C., Cain, P., Pinkas, D., and Zuccherato, R. (2001). Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP). RFC 3161. Internet Engineering Task Force.
- Housley, R. (2009). Cryptographic Message Syntax (CMS). RFC 5652. Internet Engineering Task Force.
- Krawczyk, H. and Eronen, P. (2010). HMAC-based Extract-and-Expand Key Derivation Function (HKDF). RFC 5869. Internet Engineering Task Force.
- Crocker, D., Hansen, T., and Kucherawy, M. (2011). DomainKeys Identified Mail (DKIM) Signatures. RFC 6376. Internet Engineering Task Force.
- Topkara, M., Topkara, U., and Atallah, M.J. (2006). Words are not enough: Sentence level natural language watermarking. In Proceedings of the 4th ACM Workshop on Content Protection and Security, pp. 37-46. ACM.
- W3C (2024). Verifiable Credential Data Integrity 1.0. W3C Candidate Recommendation. https://www.w3.org/TR/vc-data-integrity/.
- Wouters, P., Tschofenig, H., Callas, J., Calder, T., and Richardson, M. (2024). OpenPGP. RFC 9580. Internet Engineering Task Force.
| Scenario | A1: Hostile Infra | A2: Legal Compulsion | A3: State-Level | A4: Compromised Admin |
|---|---|---|---|---|
| 2.1 Investigative Journalism | Yes—Ed25519 + Rekor + RFC 3161 + Git | Yes—Multi-juris. TSAs + Rekor | Partial (DNSSEC-dep.) | Yes—Rekor timeline |
| 2.2 Academic Publishing | Yes—Full multi-anchor stack | Yes—RFC 3161 for regulatory | Partial | Yes—Multi-signer (>=3) |
| 2.3 Medical/Legal/Compliance | Yes—CMS/PKCS#7 + RFC 3161 | Yes—Commercial TSA | Partial | Yes—Rekor + SOC 2 |
| 2.4 AI Content Auth. | Yes—Pre-pub. signing timestamp | Partial (domestic TSA) | Partial | Yes—PGP ext. key |
| 2.5 Shared Hosting (min. viable) | Yes—RFC 3161 + Git | Partial (single-juris.) | Limited | Yes—RFC 3161 timeline |
| Feature | 5.6-7.1 | 7.2-7.3 | 7.4 | 8.0-8.1 | 8.2-8.5 |
|---|---|---|---|---|---|
| SHA-256 / SHA-512 | Yes | Yes | Yes | Yes | Yes |
| SHA3-256 / SHA3-512 | No | Yes | Yes | Yes | Yes |
| BLAKE2b-512 | No | Yes | Yes | Yes | Yes |
| BLAKE3-256 (pure-PHP) | Yes | Yes | Yes | Yes | Yes |
| SHAKE128 / SHAKE256 | No | Yes | Yes | Yes | Yes |
| GOST R 34.11-94 * | Yes | Yes | Yes | Yes | Yes |
| RIPEMD-160 / Whirlpool | Yes | Yes | Yes | Yes | Yes |
| Ed25519 (ext-sodium) | No | Yes | Yes | Yes | Yes |
| SLH-DSA (pure-PHP) | Yes | Yes | Yes | Yes | Yes |
| ECDSA P-256 (ext-openssl) | Yes | Yes | Yes | Yes | Yes |
| RSA (ext-openssl) | Yes | Yes | Yes | Yes | Yes |
| HMAC mode | Yes | Yes | Yes | Yes | Yes |
| HKDF hardening (Level 2) | No | Yes | Yes | Yes | Yes |
| AES-256-GCM (Level 3) | Yes | Yes | Yes | Yes | Yes |
| Rekor anchoring | No | Yes | Yes | Yes | Yes |
| RFC 3161 anchoring | Yes | Yes | Yes | Yes | Yes |
| Git anchoring | Yes | Yes | Yes | Yes | Yes |
| DANE/DNSSEC | Yes | Yes | Yes | Yes | Yes |
| Canary tokens (all 14 ch.) | Yes | Yes | Yes | Yes | Yes |
| JSON-LD / W3C Data Integrity | Yes | Yes | Yes | Yes | Yes |
| WP-CLI support | Yes | Yes | Yes | Yes | Yes |
Disclaimer/Publisher’s Note: The statements, opinions and data contained in all publications are solely those of the individual author(s) and contributor(s) and not of MDPI and/or the editor(s). MDPI and/or the editor(s) disclaim responsibility for any injury to people or property resulting from any ideas, methods, instructions or products referred to in the content. |
© 2026 by the authors. Licensee MDPI, Basel, Switzerland. This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license (http://creativecommons.org/licenses/by/4.0/).