[FFmpeg-devel] Using decryption keys in a decoder

Maxim max_pole
Tue Apr 7 17:01:11 CEST 2009


Michael Niedermayer schrieb:
> On Tue, Apr 07, 2009 at 11:20:03AM +0200, Maxim wrote:
>   
>> Hello guys,
>>
>> I need to specify a decryption key for some Indeo5 video clips in order
>> to play them back. The indeo5 keys are just numbers used to perform
>> frame data encryption. I know about the FFmpeg's ability to specify keys
>> for file formats but how it's about decoders?
>> Please give me an example how such keys could be specified and retrieved
>> by a decoder...
>>     
>
> What kind of encryption does indeo5 use?
>   

simple XOR...
The encryption key is derived from the password named "AccessWord"
entered by the user as follows:

uint32_t   k1 = (AccessWord >> 1) + 16384;
uint32_t   k2 = (k1 / 200) * 200 + 21;
uint32_t   k3 = (~AccessWord) >> 16;

for (i = 0; i < size; i++) {
   k3 = (k3 * k2 + 1) & 0xFFFF;
   dataPtr ^= k3;
   dataPtr++;
}

I don't know if it may be any kind of known encryption algorithm but
it's how it works...

> And is it correct that the binary decoder also needs these keys manually
> provided by the user?
>   

Yes, otherwise the protected clip cannot be played back. Indeo5 uses a
special hashing function to check if the password provided by user is
correct before decoding. This check is achieved by calculating a hash
from the provided password and comparing that against the hash received
with the bitstream header. If they mismatch the decoder refuses to
decode the clip...

Indeo4 uses almost the same protection scheme but without encryption of
the frame data. It just check if the hashes match... This one can be
easiliy cancelled, so it's not a big problem...

Regards
Maxim



More information about the ffmpeg-devel mailing list