

In general, the arithmetics behind LFSRs makes them very elegant as an object to study and implement. The mathematics of a cyclic redundancy check, used to provide a quick check against transmission errors, are closely related to those of an LFSR. Both hardware and software implementations of LFSRs are common. However, an LFSR with a well-chosen feedback function can produce a sequence of bits that appears random and has a very long cycle.Īpplications of LFSRs include generating pseudo-random numbers, pseudo-noise sequences, fast digital counters, and whitening sequences. Likewise, because the register has a finite number of possible states, it must eventually enter a repeating cycle. The initial value of the LFSR is called the seed, and because the operation of the register is deterministic, the stream of values produced by the register is completely determined by its current (or previous) state. Thus, an LFSR is most often a shift register whose input bit is driven by the XOR of some bits of the overall shift register value. The most commonly used linear function of single bits is exclusive-or (XOR). In computing, a linear-feedback shift register ( LFSR) is a shift register whose input bit is a linear function of its previous state. Here's some example code that will do the job.Short description: Type of shift register in computing To obfuscate a series of byte values, you might find it easier to extract just 8 bits at each iteration. Just XOR these values with your data to obfuscate it, and repeat the process using the same sequence of numbers to retrieve the original data.

Obfuscating data with an LFSR:Īs long as your LSFR initially contains a non-zero value, it will step through a sequence of 65535 (2 16–1) pseudorandom values at every iteration. The list of 16-bit LFSRs has 2048 entries. This page contains lists of feedback constants that work with LFSRs of different lengths. (Note: There is no XOR gate feeding into bit 16 because there is no input from bit 17.) Other LFSRs: The quickest way of doing this is by calculating the XOR product of the 16-bit shift register with 0xB400, which has all of these bits set (1011010000000000 in binary). When this bit is zero, this has no effect, but when it is 1, all these bits are flipped. The least significant bit extracted from the end of the shift register is fed back by XOR-ing it with bits 16, 14, 13 and 11. The Wikipedia article you got this from has an illustration that explains what the code is doing:
