| 开发者 | mtnviewpro |
|---|---|
| 更新时间 | 2026年3月19日 01:12 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 6.9 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
[hash_verify].
Supported algorithms include SHA-256/384/512 family, SHA-3, BLAKE2b/2s, BLAKE3, SHAKE, RIPEMD-160, Whirlpool, and GOST variants.
HMAC Integrity Mode adds a shared-secret layer on top of hashing. The key lives in wp-config.php — never the database — so an adversary with database access alone cannot silently update a hash.
define('ARCHIVIOMD_HMAC_KEY', 'your-secret-key');
Document Signing
All signing methods sign the same canonical message and run independently. Any combination can be active simultaneously.
Ed25519 (recommended for most sites) — uses PHP sodium (ext-sodium). Private key in wp-config.php; public key published at /.well-known/ed25519-pubkey.txt. In-browser keypair generator included. Supports DSSE envelope mode (Sigstore spec) with PAE binding to prevent cross-protocol replay.
SLH-DSA / SPHINCS+ (post-quantum) — pure-PHP implementation of NIST FIPS 205. No extensions, no Composer dependencies; works on any shared host running PHP 7.4+. Security rests on SHA-256 alone — not on factoring or discrete logarithms. Four parameter sets: SLH-DSA-SHA2-128s (default, 7,856-byte signatures), -128f (faster, 17,088 bytes), -192s, -256s. Signing takes 200–600 ms on shared hosting per publish event — front-end rendering is not affected. Running Ed25519 and SLH-DSA together (hybrid mode) provides both classical and quantum verifiability from a single DSSE envelope.
ECDSA P-256 ⚠️ Enterprise/compliance mode only. Enable when an external framework (eIDAS, SOC 2, HIPAA, government PKI) explicitly requires X.509 certificate-backed ECDSA. For all other sites, Ed25519 is recommended. Nonce generation is 100% delegated to OpenSSL.
RSA ⚠️ Legacy compatibility only. Enable when a downstream system cannot accept Ed25519, ECDSA, or SLH-DSA keys.
CMS / PKCS#7 — Detached DER signatures importable into Adobe Acrobat, Windows Explorer, and enterprise DMS platforms. Reuses your ECDSA or RSA key.
JSON-LD / W3C Data Integrity — Produces eddsa-rdfc-2022 and ecdsa-rdfc-2019 proof blocks per post and publishes a did:web DID document at /.well-known/did.json. Compatible with ActivityPub, W3C Verifiable Credentials, and decentralised identity wallets.
All private keys are stored in wp-config.php — never in the database. PEM files uploaded via the admin UI are stored outside DOCUMENT_ROOT, chmod 0600, with an .htaccess Deny guard.
DANE / DNS Key Corroboration
Publishes every active signing key as a DNSSEC-protected DNS TXT record, giving verifiers a trust path entirely independent of your web server and TLS certificate. An attacker must compromise both your web host and your DNS zone simultaneously to forge a key.
Records use the amd1 tag-value format (modelled on DKIM):
_archiviomd._domainkey.example.com. IN TXT "v=amd1; k=ed25519; p="
When ECDSA P-256 is configured, an optional TLSA record (RFC 6698, DANE-EE, Selector=1) binds the leaf certificate to your HTTPS service. A machine-readable discovery endpoint at /.well-known/archiviomd-dns.json lists all active records and expected values. A self-describing format specification is served at /.well-known/archiviomd-dns-spec.json regardless of whether DANE is enabled.
Weekly passive health checks via wp-cron surface failures as dismissible admin notices. Key rotation mode suppresses false-positive mismatch warnings during DNS TTL expiry. Full WP-CLI support: wp archiviomd dane-check.
DNSSEC is required for DANE to provide actual security. Most registrars offer it with a single toggle.
External Anchoring
RFC 3161 Trusted Timestamps — Sends content hashes to a Time Stamp Authority on every anchor job. The signed .tsr token binds the hash to a specific time and is independently verifiable offline with OpenSSL. Built-in providers: FreeTSA.org, DigiCert, GlobalSign, Sectigo. Custom endpoint supported.
Sigstore / Rekor Transparency Log — Submits a hashedrekord entry to the public Rekor append-only log (rekor.sigstore.dev) on every anchor job. Entries are immutable and publicly verifiable without an account or API key. When Ed25519 keys are configured, entries are signed with the site key; otherwise an ephemeral keypair is generated automatically.
Git Repository Anchoring — Commits integrity records to GitHub or GitLab (public, private, or self-hosted) on every anchor job, creating an independent audit trail in commit history.
All three anchoring methods can run simultaneously on every job.
Document Management
Browser-based editing (no FTP) for Markdown meta-documentation (security.txt, privacy policy, terms of service, etc.) and SEO/compliance files: robots.txt, llms.txt, ads.txt, app-ads.txt, sellers.json, ai.txt. Documents get automatic UUID assignment, SHA-256 checksum tracking, and an append-only changelog. Standard and comprehensive XML sitemaps included.
Compliance & Audit Tools
Metadata CSV, Compliance JSON, and Backup ZIP exports each generate a companion .sig.json integrity receipt (SHA-256 hash + optional cryptographic signature). The Compliance JSON export preserves full relationships between posts, hash history, anchor log entries, and RFC 3161 TSR manifests — suitable for legal evidence packages and SIEM ingestion.
Manual checksum verification (read-only; does not modify anything). Backup & Restore with mandatory dry-run before any restore operation.
WP-CLI: wp archiviomd process-queue, anchor-post <id>, verify <id>, prune-log.
Canary Tokens (Steganographic Fingerprinting)
Entirely opt-in. Nothing is injected unless you explicitly enable it.
Embeds an invisible, HMAC-authenticated fingerprint (post ID + timestamp + 48-bit MAC) into published content at render time — stored content is never modified. Fingerprints survive copy-paste and can identify the source of scraped content. A built-in decoder and DMCA Notice Generator are included. Signed evidence packages (.sig.json) can be generated after a successful decode for use in legal proceedings.
Encoding operates across up to 14 channels in three layers:
Unicode layer (survives copy-paste; stripped by OCR): zero-width characters, thin-space variants, apostrophe variants, soft hyphens.
Semantic layer (survives OCR and Unicode normalisation; each opt-in): contraction encoding, synonym substitution, punctuation choice, spelling variants, hyphenation choices, number/date style, punctuation style II, citation/title style.
Structural layer (CDN-proof): sentence-count parity, word-count parity.
Each bit is encoded three times per active channel with majority-vote redundancy. A cache compatibility layer ensures fingerprints survive HTML minification by WP Super Cache, W3 Total Cache, LiteSpeed Cache, WP Rocket, and similar plugins. The Canary Coverage meta box on the post edit screen shows per-channel slot availability before you publish.
Ideal For
uploads/meta-docs/ and are preserved on uninstall.
.well-known/ file serving)Markdown and SEO files are stored in uploads/meta-docs/. Metadata (UUIDs, checksums, changelogs) is stored in wp_options with the prefix mdsm_doc_meta_.
Yes. All metadata is stored in the database. The plugin's Backup & Restore tool provides portable archives, but standard database backups are still required.
All files remain in the uploads directory. Database options are only deleted if you explicitly enable metadata cleanup before uninstalling.
No. It tracks integrity and provides manual verification tools. Verification is admin-triggered and read-only — it does not prevent or block modifications.
Yes. All signing methods are independently verifiable with standard tooling — no WordPress dependency required.
/.well-known/ed25519-pubkey.txt and verify with any sodium-compatible tool./.well-known/slhdsa-pubkey.txt and verify with any FIPS 205-compatible library (e.g. pyspx)./.well-known/ecdsa-cert.pem and verify with OpenSSL or the Python cryptography library./.well-known/rsa-pubkey.pem and verify with OpenSSL./.well-known/did.json and verify with @digitalbazaar/jsonld-signatures (JS) or pyld + cryptography (Python)..tsr and .tsq files from the compliance tools page and run openssl ts -verify -in response.tsr -queryfile request.tsq -CAfile tsa.crt.rekor-cli verify --artifact-hash sha256:<HASH> --log-index <INDEX> or look up the entry at https://search.sigstore.dev/?logIndex=<INDEX>.Only when an external compliance framework explicitly requires X.509 certificate-backed ECDSA — for example, eIDAS qualified signatures, certain government PKI mandates, SOC 2 audit requirements specifying certificate-bound signatures, or HIPAA requirements from a specific assessor. For all other sites, Ed25519 is recommended: simpler to configure, no certificate expiry to manage, and equally secure.
Use RSA only when a downstream system cannot accept Ed25519, ECDSA, or SLH-DSA keys — for example, older HSMs or legacy enterprise toolchains hardcoded to RSA. Use CMS/PKCS#7 when a DMS, Adobe Acrobat workflow, or regulated-industry audit tool specifically requires .p7s format. Use JSON-LD / W3C Data Integrity when building interoperability with ActivityPub implementations, W3C Verifiable Credential ecosystems, or decentralised identity wallets. For general integrity verification, Ed25519 covers all common use cases with far less operational overhead.
SLH-DSA (SPHINCS+) builds a Merkle tree of hundreds of hash computations per signature. Because this implementation is pure PHP rather than a native C extension, expect 200–600 ms on shared hosting for the default SHA2-128s parameter set. To reduce it, switch to SHA2-128f — same NIST Category 1 security, 5–10× faster signing, larger signatures. This overhead occurs once per publish event and has no effect on front-end page rendering.
Yes, if you need verifiability today and quantum resilience for the future. In hybrid mode the DSSE envelope carries both signatures. Existing verifiers that only understand Ed25519 continue to work unchanged.
No. The public good instance (rekor.sigstore.dev) is a free, unauthenticated API operated by the Linux Foundation's Sigstore project.
Yes. Without DNSSEC, DNS responses are unauthenticated and the TXT records provide no additional trust over the web server alone. Most registrars now offer DNSSEC with a single toggle.
The plugin does not collect, store, or process personal data from visitors. It stores administrative metadata associated with WordPress user accounts. Compliance with GDPR depends on how you use the plugin — consult your legal team.
No. All features require the manage_options capability (administrator role).
get_the_title() while building the <title> tag before wp_head completes; the badge HTML was being appended, stripped of its tags, and indexed as part of the post title. Badge now only injects after wp_head has fired, ensuring it renders in the page body only and is never seen by search engines./.well-known/meta-docs/ path, which is where the file manager stores custom files by default. Previously only the root-level route was registered, so any request to the .well-known path fell through to a 404.flush_rewrite_rules() called inside an AJAX handler does not always persist reliably; the fix schedules a guaranteed follow-up flush on the next real page load via a transient flag./wp-json/archivio-id/v1/posts/{id}/signatures), retrieves all PGP signature records, fetches public keys from keys.openpgp.org by fingerprint, and performs client-side cryptographic verification using OpenPGP.js (Ed25519, RSA, ECDSA supported). Results are surfaced as Step 8 in the full verification report.Cache-Control on /verify from public to private to prevent shared-proxy caching of verification status, and reduced /status cache TTL to prevent stale feature-flag disclosure.Version and MDSM_VERSION constant were stuck at 1.16.0 across the 1.17.x release series. Both now correctly read 1.17.4 and match the readme Stable tag./.well-known/archiviomd-dns-spec.json — a machine-readable, self-contained specification for the amd1 TXT record format, the TLSA profile, the canonical message format, and the end-to-end verification flow.archiviomd-dns.json now includes a spec_url field pointing to the spec endpoint.ARCHIVIOMD_DANE_TTL constant; TTL now configurable and used consistently across rotation threshold, admin UI, and Cache-Control headers.If-None-Match / 304 conditional response support to the discovery endpoint.{"enabled":false} so verifiers can distinguish module-off from a wrong URL.Cache-Control bug in the discovery endpoint that overwrote the intended public, max-age=3600 header.--enable and --disable flags to wp archiviomd dane-check.amd1 format. DoH-based health checks, weekly passive cron, key rotation workflow, machine-readable discovery endpoint at /.well-known/archiviomd-dns.json, JSON-LD integration, and WP-CLI wp archiviomd dane-check./.well-known/rsa-pubkey.pem..p7s. Reuses existing ECDSA or RSA key.eddsa-rdfc-2022 and ecdsa-rdfc-2019. DID document at /.well-known/did.json.DOCUMENT_ROOT, chmod 0600. Leaf certificate published at /.well-known/ecdsa-cert.pem.ajax_decode_url()): hostname now resolved via dns_get_record() with full private/loopback range rejection and cURL IP pinning to prevent TOCTOU.X-Forwarded-For: now uses rightmost IP with private-range validation, falls back to REMOTE_ADDR.extract_main_content(): input capped at 2 MB; DOMDocument used as primary extractor; regex fallback uses bounded quantifiers.sslverify => false from all outbound fetches.ARCHIVIOMD_HMAC_KEY is not defined in wp-config.php.Cache-Control: no-transform header on all fingerprinted responses.archiviomd/v1/canary-check to content/v1/verify to reduce plugin fingerprinting via API enumeration..htaccess to plugin root blocking direct HTTP access to .php, .txt, .json, and other source files.wp_options key obfuscation for all Canary Token settings.wp_archivio_canary_log) with CSV export..sig.json receipt with SHA-256 + optional Ed25519 signature for each decode event.