2.1.1. nsF5

The nsF5 [8] algorithm embeds data by modifying the least significant bits of AC ("alternating current", having at least one non-zero frequency) DCT coefficients of JPEG cover objects. Data is hidden using syndrome coding. Assuming that the sender has a *p*-bit message *m* ∈ {0, 1}*p* to embed using *n* AC DCT values with their least significant bits *x* ∈ {0, 1}*n* while only *k* coefficients *xi*, *i* ∈ *I* are non-zero, only some bits *xi*, *i* ∈ *I* are modified, thus receiving *y* ∈ {0, <sup>1</sup>}*<sup>n</sup>*. This vector needs to satisfy:

> *Dy* = *m*,

where *D* is a binary *p* × *n* matrix that is shared between the sending and receiving party. The embedding party needs to find the solution for the aforementioned equation that does not require modifying the bits of zero-valued coefficients (*xi* = *yi*, *i* ∈/ *I*). The solution needs to minimize the Hamming weight between the modified and unmodified leastsignificant-bit vectors (*x* − *y*). Using this coding method allows the sender to introduce fewer changes than there are bits to embed, thus decreasing the impact of embedding

on the carrier object. While the example provided shows how syndrome coding works, usually a more sophisticated coding scheme, syndrome trellis coding (STC) [11], using a parity-check matrix in place of *D*, is applied. The y vector represents a path through a trellis built based on the parity-check matrix.
