Package Crypto :: Package Protocol :: Module Chaffing :: Class Chaff
[frames] | no frames]

Class Chaff

Class implementing the chaff adding algorithm.

Methods for subclasses:

_randnum(size):
Returns a randomly generated number with a byte-length equal to size. Subclasses can use this to implement better random data and MAC generating algorithms. The default algorithm is probably not very cryptographically secure. It is most important that the chaff data does not contain any patterns that can be used to discern it from wheat data without running the MAC.
Instance Methods
 
__init__(self, factor=1.0, blocksper=1)
Chaff(factor:float, blocksper:int)
 
chaff(self, blocks)
chaff( [(serial-number:int, data:string, MAC:string)] ) : [(int, string, string)]
Method Details

__init__(self, factor=1.0, blocksper=1)
(Constructor)

 

Chaff(factor:float, blocksper:int)

factor is the number of message blocks to add chaff to, expressed as a percentage between 0.0 and 1.0. blocksper is the number of chaff blocks to include for each block being chaffed. Thus the defaults add one chaff block to every message block. By changing the defaults, you can adjust how computationally difficult it could be for an adversary to brute-force crack the message. The difficulty is expressed as:

pow(blocksper, int(factor * number-of-blocks))

For ease of implementation, when factor < 1.0, only the first int(factor*number-of-blocks) message blocks are chaffed.

chaff(self, blocks)

 

chaff( [(serial-number:int, data:string, MAC:string)] ) : [(int, string, string)]

Add chaff to message blocks. blocks is a list of 3-tuples of the form (serial-number, data, MAC).

Chaff is created by choosing a random number of the same byte-length as data, and another random number of the same byte-length as MAC. The message block's serial number is placed on the chaff block and all the packet's chaff blocks are randomly interspersed with the single wheat block. This method then returns a list of 3-tuples of the same form. Chaffed blocks will contain multiple instances of 3-tuples with the same serial number, but the only way to figure out which blocks are wheat and which are chaff is to perform the MAC hash and compare values.