Which VOB Packets Are Encrypted Under CSS?
Under the Content Scramble System (CSS) specification, encryption is applied exclusively to the payload of MPEG-2 video packets within a DVD Video Object (VOB) file. Audio streams, subtitle data, navigation packs, and all stream headers remain completely unencrypted to allow DVD players to demux, synchronize, and navigate the disc without needing to decrypt the entire data stream.
The Structure of a VOB File
A VOB file is based on the MPEG-2 Program Stream format, organized into discrete 2,048-byte blocks that match the physical sector size of a DVD-Video disc. Each 2,048-byte sector represents a "Pack" containing:
- A Pack Header (14 bytes)
- An optional System Header
- One or more PES (Packetized Elementary Stream) Packets
Each PES packet includes a PES header followed by the actual elementary stream payload (video, audio, or private data).
Specifically Encrypted Packets: Video Only
CSS targets only video PES packets. In an MPEG-2
stream, video elementary streams are identified by the Stream ID range
0xE0 through 0xEF (DVD-Video almost
universally uses Stream ID 0xE0).
Within these designated video sectors, CSS does not encrypt the entire sector:
- Pack Headers and PES Headers are unencrypted: The 14-byte pack header, presentation timestamps (PTS), decode timestamps (DTS), and PES header flags remain in plain text.
- The PES Payload is encrypted: Only the compressed MPEG-2 video elementary stream data contained within the PES packet payload is scrambled using the 40-bit CSS stream cipher.
Unencrypted Packets Within the VOB
All non-video packets within the VOB container remain unencrypted under CSS specifications:
- Navigation Packs (NV_PCK): Sectors containing
Presentation Control Information (PCI) and Data Search Information (DSI)
use Stream ID
0xBF(Private Stream 2). These control playback branches, angles, and menu highlights, and must be readable by the drive and player firmware without decryption keys. - Audio Packs (A_PCK): Linear PCM, Dolby Digital
(AC-3), DTS, and MPEG audio packets are left unencrypted. AC-3 and DTS
reside under Stream ID
0xBD(Private Stream 1) with specific sub-stream IDs, while MPEG audio uses Stream IDs0xC0through0xDF. - Sub-picture Packs (SP_PCK): Subtitles and menu
overlays (also mapped under Private Stream 1, Stream ID
0xBD) are not scrambled by CSS.
How Encryption is Flagged
A player determines whether a sector contains encrypted video through two indicators:
- Sector Copyright Management Information (CPR_MAI): The physical DVD sector header contains a copyright management field where specific bits indicate whether the sector payload is scrambled and which CSS key generation applies.
- PES Scrambling Control Bits: The MPEG-2 PES header
contains a 2-bit field (
PES_scrambling_control). In unencrypted packets, this field is set to00. In CSS-encrypted video packets, this field is set to a non-zero value (typically01or10), indicating that the payload requires descrambling before being sent to the MPEG-2 video decoder.