Office Permission Gates โ Visual Map
Strength Legend
Badge
Level
Meaning
๐ด
Real Encryption
Content is ciphertext โ must recover the password or key to read anything
๐ก
Verifier Only
Content is plaintext โ the gate stores a hash/verifier that can be stripped by editing the file
๐ข
Cleartext / Decode
Password is stored in the file (readable or trivially reversible)
โช
PKI / Not Password
Protected by certificate, external service, or keyless obfuscation โ no password to guess
Product ร Gate Matrix
Product
Open / Encrypt
Modify / Write
Sheet / Section Protect
Workbook / Structure Protect
VBA Lock
Digital Signature
IRM / RMS
Word .doc
๐ด๐ข
๐ข
โ
โ
๐ก
โช
โช
Word .docx
๐ด
๐ก
โ
โ
๐ก
โช
โช
Excel .xls
๐ด๐ข
๐ก
๐ก
๐ก
๐ก
โช
โ
Excel .xlsx/.xlsb
๐ด
๐ก
๐ก
๐ก
๐ก
โช
โ
PowerPoint .ppt
๐ด
๐ข
โ
โ
๐ก
โช
โ
PowerPoint .pptx
๐ด
๐ก
โ
โ
๐ก
โช
โ
OneNote .one
๐ด
โ
โ
โ
โ
โ
โ
Outlook .pst
๐ข
โ
โ
โ
โ
โ
โ
Access .mdb
๐ข
โ
โ
โ
๐ก
โ
โ
Access .accdb
๐ด
โ
โ
โ
๐ก
โ
โ
OpenDocument .odt/.ods/.odp
๐ด
โ
๐ก
โ
โ
โ
โ
Visio .vsd
๐ด
โ
โ
โ
๐ก
โช
โ
Visio .vsdx
๐ด
โ
โ
โ
๐ก
โช
โ
Project .mpp
๐ขโ
๐ขโ
โ
โ
๐ก
โ
โ
Publisher .pub
โโ
โ
โ
โ
๐ก
โ
โ
Money .mny
๐ดโ
โ
โ
โ
โ
โ
โ
Access .mdw
๐ขโ
โ
โ
โ
โ
โ
โ
InfoPath .xsn
โ
โ
โ
โ
โ
โช
โ
๐ด๐ข on .doc/.xls = XOR obfuscation (๐ข reversible) coexists with RC4 encryption (๐ด real) โ the scheme depends on the file's encryption flags
.xls Modify is ๐ก (16-bit verifier), not ๐ข โ unlike Word/PowerPoint, Excel does not store the modify password in cleartext
Outlook .pst Open is ๐ข because the "password" is a CRC-32 advisory gate that encrypts nothing
Access .mdb Open is ๐ข because the password is XOR-masked with a fixed/date key (instant decode)
โ = OUT-OF-CORPUS โ no [MS-*] spec documents the protection mechanism; details from community RE only
Visio open encryption uses the same [MS-OFFCRYPTO] algorithms as Word/Excel/PPT (agile for .vsdx, RC4 CryptoAPI for .vsd)
Visio Lock* shape cells are UI-level flags, not cryptographic gates โ no password involved
InfoPath has NO file-level encryption โ only a designMode="protected" UI flag and optional digital signatures
Algorithm ร Product Matrix
Which algorithms are used by which products. โ = used, โ = not applicable.
๐ด Real Encryption
Algorithm
Word .doc
Word .docx
Excel .xls
Excel .xlsx/.xlsb
PPT .ppt
PPT .pptx
OneNote .one
Outlook .pst
Access .mdb
Access .accdb
ODF
ECMA-376 Agile
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
ECMA-376 Standard
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
RC4 CryptoAPI + SHA-1
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
RC4 + MD5 Legacy
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
XOR Obfuscation
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
ODF Encryption (PBKDF2 / Argon2id)
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
๐ก Protection Verifiers
Algorithm
Word .doc
Word .docx
Excel .xls
Excel .xlsx/.xlsb
PPT .ppt
PPT .pptx
OneNote .one
Outlook .pst
Access .mdb
Access .accdb
ODF
ISO Protection Hash
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
Word 2007 Legacy KDF
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
VBA Project Password
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
16-bit Verifier (Method 1)
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
๐ข โช Non-Cryptographic
Algorithm
Word .doc
Word .docx
Excel .xls
Excel .xlsx/.xlsb
PPT .ppt
PPT .pptx
OneNote .one
Outlook .pst
Access .mdb
Access .accdb
ODF
๐ข Cleartext Passwords
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
๐ข PST CRC-32
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
๐ข Jet XOR (fixed/date key)
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
๐ข ULS 3DES (fixed key)
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
๐ด MSISAM (MD5/SHA-1 + RC4)
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โช PST Body Cipher (keyless)
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โช IRM / RMS (certificate)
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โช Digital Signatures (PKI)
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
โ
File Detection Decision Tree
flowchart TD
START([Open File]) --> EXT{Extension?}
EXT -->|.doc .xls .ppt| OLE[Binary OLE/CFB]
EXT -->|.docx .xlsx .pptx<br/>.docm .xlsm .pptm| ZIP_CHK{Is it a ZIP<br/>on disk?}
EXT -->|.one .onetoc2| ONENOTE[OneNote Revision Store]
EXT -->|.pst .ost| PST_CHK[PST NDB Container]
EXT -->|.mdb| JET_CHK[Jet Header Page 0]
EXT -->|.accdb| ACE_CHK[ACE Header Page 0]
EXT -->|.odt .ods .odp| ODF_CHK[ODF-ZIP]
%% Binary OLE path
OLE --> BIN_APP{Which app?}
BIN_APP -->|Word .doc| DOC_FLAGS{"FibBase flags<br/>fEncrypted? fObfuscated?"}
BIN_APP -->|Excel .xls| XLS_FLAGS{"FilePass record<br/>wEncryptionType?"}
BIN_APP -->|PPT .ppt| PPT_FLAGS{"CryptSession10<br/>Container present?"}
DOC_FLAGS -->|"fEnc=1, fObs=1"| XOR_W[๐ข XOR Obfuscation<br/>Method 2]
DOC_FLAGS -->|"fEnc=1, fObs=0"| DOC_VER{"EncryptionVersionInfo<br/>vMajor / vMinor?"}
DOC_FLAGS -->|"fEnc=0"| DOC_NONE["No open encryption<br/>โ check modify / protect gates"]
DOC_VER -->|"1 / 1"| RC4MD5[๐ด RC4 + MD5<br/>40-bit legacy]
DOC_VER -->|"2-4 / 2"| RC4SHA[๐ด RC4 CryptoAPI<br/>SHA-1]
XLS_FLAGS -->|"0x0000"| XOR_X[๐ข XOR Obfuscation<br/>Method 1]
XLS_FLAGS -->|"0x0001"| XLS_VER{"vMajor / vMinor?"}
XLS_FLAGS -->|"No FilePass"| XLS_NONE["No open encryption<br/>โ check VelvetSweatshop<br/>โ check sheet/workbook protection"]
XLS_VER -->|"1 / 1"| RC4MD5
XLS_VER -->|"2-4 / 2"| RC4SHA
PPT_FLAGS -->|Yes| RC4SHA
PPT_FLAGS -->|No| PPT_NONE["No open encryption<br/>โ check modify password"]
%% OOXML path
ZIP_CHK -->|"Yes (PK header)"| OOXML_PLAIN["OOXML plaintext ZIP<br/>โ check protection elements<br/>in settings.xml / workbook.xml<br/>/ presentation.xml"]
ZIP_CHK -->|"No (OLE header)"| OOXML_ENC["Encrypted OOXML<br/>โ read \\EncryptionInfo stream"]
OOXML_ENC --> ENC_MINOR{"vMinor?"}
ENC_MINOR -->|"0x0002"| STD_ENC[๐ด ECMA-376 Standard<br/>AES + SHA-1 ร 50000]
ENC_MINOR -->|"0x0004"| AGILE_ENC[๐ด ECMA-376 Agile<br/>XML-driven params]
ENC_MINOR -->|"0x0003"| EXT_ENC[โช Extensible / IRM<br/>Not password-based]
%% OneNote path
ONENOTE --> ONE_CHK{"FileNodeID 0x07C<br/>present?"}
ONE_CHK -->|Yes| ONE_BLOB["Read encryption blob<br/>โ detect scheme from<br/>EncryptionVersionInfo"]
ONE_CHK -->|No| ONE_NONE[No encryption]
ONE_BLOB --> ENC_MINOR
%% PST path
PST_CHK --> PST_PW{"PidTagPstPassword<br/>0x67FF โ 0?"}
PST_PW -->|Yes| PST_CRC[๐ข CRC-32 advisory<br/>password]
PST_PW -->|No| PST_NP[No password]
PST_CHK --> PST_BODY{"bCryptMethod?"}
PST_BODY -->|"0x01"| PERMUTE[โช Permutative<br/>Keyless decode]
PST_BODY -->|"0x02"| CYCLIC[โช Cyclic<br/>BID-keyed decode]
PST_BODY -->|"0x00"| NONE_BODY[No body cipher]
PST_BODY -->|"0x10"| WIP[โช WIP/EDP<br/>OS-held key]
%% Jet / ACE path
JET_CHK --> JET_VER{"Engine version?"}
JET_VER -->|Jet 3| JET3[๐ข Fixed-key XOR]
JET_VER -->|Jet 4| JET4[๐ข Date-key XOR]
ACE_CHK --> ACE_VER{"ACE version?"}
ACE_VER -->|2007| ACE07[๐ด RC4 + hash]
ACE_VER -->|"2010+"| ACE10[๐ด Agile-style<br/>SHA-512 + AES-256]
%% MDW path
EXT -->|.mdw .mda| MDW_CHK["Jet System DB signature"]
MDW_CHK --> ULS[๐ข ULS 3DES decode<br/>fixed key]
%% Money / MSISAM path
EXT -->|.mny| MNY_CHK["MSISAM Database signature"]
MNY_CHK --> MSISAM_FLAGS{"Flag 0x06\nat 0x298?"}
MSISAM_FLAGS -->|Yes| MSISAM[๐ด MSISAM encryption<br/>MD5/SHA-1 + RC4]
MSISAM_FLAGS -->|No| MNY_NONE[No encryption]
%% ODF path
ODF_CHK --> ODF_MAN{"manifest.xml<br/>encryption-data?"}
ODF_MAN -->|"Blowfish CFB"| ODF11[๐ด ODF 1.1<br/>PBKDF2 1024 iters]
ODF_MAN -->|"AES-256-CBC"| ODF12[๐ด ODF 1.2<br/>PBKDF2 100K iters]
ODF_MAN -->|"AES-256-GCM"| ODF13[๐ด ODF 1.3<br/>Argon2id]
ODF_MAN -->|No| ODF_PLAIN["No encryption<br/>โ check table:protected<br/>/ text:protected flags"]
Quick Links
Algorithm Docs โ ๐ด Password-Derived (Crackable)
Algorithm Docs โ โช Non-Password (Not Crackable)
Landscape Docs