Learning Objectives: CSM25 Secure Information Hiding
Learning Objectives: CSM25 Secure Information Hiding
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 1 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 2 / 47
Overview Overview
Operates on luminence and chrominance (YCbCr) (not on RGB) JPEG is a compression system
Grayscale images have luminence component only. The system employs three different compression techniques
Downsampling JPEG is not a file format.
Works in the DCT domain (not the spatial domain) Files with extension .jpeg are often JFIF or EXIF.
Quantisation JFIF is traditionally the most common file format for JPEG.
EXIF is made for digital cameras and contain extra meta
Entropy coding (lossless compression) information.
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 4 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 5 / 47
Overview Image Representation Alternatives to RGB
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 6 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 8 / 47
Image Representation Alternatives to RGB Image Representation The blockwise DCT domain
NTSC : (Y , I, Q)
Y 0.299 0.587 0.114 R
I = 0.596 −0.274 −0.322 G
Q 0.211 −0.523 0.312 B Each colour-channel (Y,Cb,Cr) considered separately
where R, G, B ∈ [0, 1]. M × N matrix divided into 8 × 8 blocks
YCbCr : (Y , Cb, Cr ) Each block is handled separately
Y 16 65.481 128.553 24.966 R
Cb = 128 + −37.797 −74.203 112.000 G
Cr 128 112.000 −93.786 −18.214 B
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 9 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 10 / 47
Image Representation The blockwise DCT domain Image Representation The blockwise DCT domain
M−1
X N−1
r
X α(u)α(v ) (2x + 1)uπ (2y + 1)v π
M−1 f (x, y ) = Tf (u, v ) cos cos
X N−1
r
X α(u)α(v ) (2x + 1)uπ (2y + 1)v π MN 2M 2N
Tf (u, v ) = f (x, y ) cos cos u=0 v =0
MN 2M 2N
x=0 y =0 where
where
(
1, if a = 0,
( α(a) =
1, if a = 0, 2, otherwise.
α(a) =
2, otherwise. M = N = 8,
M = N = 8,
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 11 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 12 / 47
Image Representation The blockwise DCT domain Image Representation The blockwise DCT domain
Matlab functions
dct2 (2D DCT transform)
idct2 (Inverse)
blkproc ( X, [M N], FUN ) Linear combination of patterns (see
For instance right)
blkproc ( X, [8 8], @dct2 ) DC (upper left) gives average colour
Use help system for details intensity
Do not use imread for JPEG images Low frequency: coarse structure
converts images to the spatial domain. High frequency: fine details
you don’t even know the compression parameters...
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 13 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 14 / 47
Compression Downsampling Compression Downsampling
Fact
The human eye is more sensitive to changes in luminance than in Original: M × N pixels ×3 components .
chrominance.
Compressed:
To sample is to collect measurements. M N 1
Each pixel is a sample (measuring the colour of the image). 2× × +M ×N =1 M ×N
2 2 2
Lower resolution means fewer samples.
Reducing resolution = downsampling Ratio
Basic M × N image: N · M samples per component (Y , Cb, Cr ). Compressed 1 12 MN 1
= = .
Original 3MN 2
Y is more useful than Cb and Cr .
Therefore we can downsample Cb and Cr We just saved 50%
M/2 × N/2 is common for Cb and Cr
Still use M × M for Y
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 16 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 17 / 47
1 Translation to YCbCr.
Fact 2 Downsampling
The human eye is more sensitive to changes in luminance than in 3 DCT transform
chrominance.
Each downsampled component matrix Y , Cb, Cr is
Watermarking tend to embed in Y (luminence) Divided into 8 × 8 blocks
Embedding in Cb and Cr would more easily be destroyed by DCT transformed blockwise
JPEG An 8 × 8 block in Cb can be associated with 1,2 or 4 Y blocks
depending on downsampling.
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 18 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 19 / 47
Compression Quantisation Compression Quantisation
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 20 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 21 / 47
Recall
−26 −3 −6 2 2 −1 0 0
2
DCT matrix
3 2
Quantisation matrix
3 0
−2 −4 1 1 0 0 0
6−415 −30 −61 27 56 −20 −2 0 7 616 11 10 16 24 40 51 61 7 −3 1 5 −1 −1 0 0 0
6 4 −22 −61 10 13 −7 −9 5 7 612 12 14 19 26 58 60 55 7
6 7 6 7
6 −47
6
7 77 −25 −29 10 5 −67 614
7 6
13 16 24 40 57 69 56 7
7
−4 1 2 −1 0 0 0 0
6 −49 12 34 −15 −10 6 2 2 7 ./ 614 17 22 29 51 87 80 62 7
6 7 6 7
6 12
6
6 −8
−7 −13 −4 −2 2 −3 3 7 618
7 6 22 37 56 68 109 103 77 7
7 1 0 0 0 0 0 0 0
6 3 2 −6 −2 1 4 2 7
7 624
6 35 55 64 81 104 113 92 7
7
4 −1 0 0 −2 −1 −3 4 −15 449 64 78 87 103 121 120 1015 0 0 0 0 0 0 0 0
0 0 −1 −4 −1 0 1 2 72 92 95 98 112 100 103 99
0 0 0 0 0 0 0 0
Quantised DCT matrix
2 3
6−26 −3 −6 2 2 −1 0 07
6 0
6
−2 −4 1 1 0 0 07
7 0 0 0 0 0 0 0 0
6 −3 1 5 −1 −1 0 0 07
6 7
≈ 6 −4 1 2 −1 0 0 0 07 Observe
6 7
6 1 0 0 0 0 0 0 07
6 7
0 is extremely common
6 0 0 0 0 0 0 0 07
6 7
4 0 0 0 0 0 0 0 05
0 0 0 0 0 0 0 0 ±1 is common
Two-digit numbers are very rare
Example from Wikipedia.
This is typical
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 22 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 23 / 47
Compression Source Coding Steganography in JPEG Into the compressed domain
message
In order to compress the data
Use few bits (short codewords) for frequent symbols
Many bits (long codewords) only for rare symbols / LSB / JPEG stego-
/
pixmap
embedding compression image
Usually, JPEG uses a simple Huffman code.
it can use other codes (saving space, but computionally costly) message
For instance, a single short codeword to say
‘the rest of the block is zero’ JPEG LSB stego-
pixmap / / /
compression embedding image
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 24 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 26 / 47
Steganography in JPEG Into the compressed domain Steganography in JPEG Into the compressed domain
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 27 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 28 / 47
Steganography in JPEG Into the compressed domain Steganography in JPEG Into the compressed domain
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 29 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 30 / 47
Steganography in JPEG Into the compressed domain Steganography in JPEG JSteg and OutGuess 0.1
Core Reading
Hide and Seek: An Introduction to Steganography by Niels Provos and
Peter Honeyman, in IEEE Security & Privacy 2003. JSteg denotes a software package.
Approach: simple LSB in the DCT domain.
1 JSteg was published No different from LSB in the spatial domain
2 JSteg was broken χ2 analysis applies
3 OutGuess was published
4 OutGuess was broken
5 F5 was published
6 F5 was broken
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 31 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 32 / 47
Steganography in JPEG JSteg and OutGuess 0.1 Steganography in JPEG JSteg and OutGuess 0.1
May ignore high and/or low frequency coefficients Typical JPEG. Typical JSteg.
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 33 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 34 / 47
Steganography in JPEG JSteg and OutGuess 0.1 Steganography in JPEG JSteg and OutGuess 0.1
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 35 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 36 / 47
Steganography in JPEG JSteg and OutGuess 0.1 Steganography in JPEG JSteg and OutGuess 0.1
~ , Key k
Input: Image I, Message m
Output: Image J
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 37 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 38 / 47
» im = jpeg_read ( ’Kerckhoffs.jpg’ )
» Xy = im.coef_arrays{im.comp_info(1).component_id} ;
» whos Xy
im =
Name Size Bytes Class Attributes
image_width: 180
Xy 248x184 365056 double
image_height: 247
image_components: 3
» Q = im.quant_tables{im.comp_info(1).quant_tbl_no}
image_color_space: 2
jpeg_components: 3
Q =
jpeg_color_space: 3
6 4 4 6 10 16 20 24
comments: {}
5 5 6 8 10 23 24 22
coef_arrays: {[248x184 double] [128x96 double] [128x96 double]}
6 5 6 10 16 23 28 22
quant_tables: {[8x8 double] [8x8 double]}
6 7 9 12 20 35 32 25
ac_huff_tables: [1x2 struct]
7 9 15 22 27 44 41 31
dc_huff_tables: [1x2 struct]
10 14 22 26 32 42 45 37
optimize_coding: 0
20 26 31 35 41 48 48 40
comp_info: [1x3 struct]
29 37 38 39 45 40 41 40
progressive_mode: 0
»
»
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 40 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 41 / 47
Matlab The JPEG toolbox Matlab The JPEG toolbox
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 42 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 43 / 47
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 44 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 45 / 47
Matlab Randomness Matlab Masking
Many functions using a PRNG Matlab allows Boolean (logical) matrices as indices
rand, randperm, randn Say A is an n × m matrix
And one dedicated for performing random permutations B = logical(ones(n,m))
new = randintrlv ( old, seed ) B(1,1) = 0
the seed is given directly when the permutation is used A(B) will be all elements of A except (1, 1)
reverse: old = randdeintrlv ( new, seed ) repmat(B,m,n) replicates B to form a larger matrix
new/old should be a 1D vector m times the heigh
serialise the image into a vector (im(:)) n times the width
before randintrlv How do you extract the AC coefficients in a JPEG image?
reshape ( vector, [ N, M ] ) to recover the 2D image Make an 8 × 8 mask of ones
after randdeintrlv Set the DC entry to 0, e.g. (1, 1)
Replicate the mask using repmat
Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 46 / 47 Dr Hans Georg Schaathun The DCT domain and JPEG Spring 2009 – Week 3 47 / 47