def remote_agreement_debug(self, fingerprint_debug, hash, delta): """THIS IS A DEBUG FUNCTION using the fingerprint from the client Using this means NO security! 8. Key Agreement on Server generates fingerprint and decommits using received ``hash`` and ``delta`` :param hash: SHA-512 Hash of codeword c :type hash: str :param delta: difference :type delta: list """ log.info('8. Key Agreement on Server') #=============================================================================== # Fingerprinting and Fuzzy Cryptography #=============================================================================== # generate fingerprint, not used see possible fingerprints self.fingerprint = fingerprint_energy_diff.get_fingerprint(self.recording_data, self.recording_samplerate) # save fingerprint for debugging scipy.savetxt("server_fingerprint.txt", self.fingerprint) log.debug('Bob fingerprint:\n'+str(self.fingerprint)) # get possible fingerprints possible_fingerprints = get_possible_fingerprints(self.recording_data, self.recording_samplerate) # DEBUG length = len(fingerprint_debug) distances = [] for fingerprint in possible_fingerprints: # calculate hamming distance between fingerprints distance = hamming_distance(fingerprint, fingerprint_debug) print('Distance: '+str(distance)+' of '+str(length)) print('Correlation percentage: '+str(1-float(distance)/float(length))) distances += [distance] min_distance = min(distances) min_correlation = 1-float(min(distances))/float(length) print('Minimal distance: '+str(min_distance)+' of '+str(length)) print('Minimal correlation percentage: '+str(min_correlation)) try: minimals = scipy.genfromtxt(self.debug_file) except Exception, err: log.error('%s' % str(err)) print('first time, so creating minimals') minimals = scipy.array([])
# fingerprinting based on energy difference import fingerprint_energy_diff import logging # Logging all above INFO level, output to stderr logging.basicConfig(#format='%(asctime)s %(levelname)-8s %(message)s') format='%(levelname)-8s %(message)s') log = logging.getLogger("fuzzy_pairing") log.setLevel(logging.DEBUG) # load channels: left_channel, samplerate = load_mono(base+'1.5_3/high/music5.wav') right_channel, samplerate = load_mono(base+'1.5_3/high/music1.wav') # fingerprint energy diff fingerprint_left = fingerprint_energy_diff.get_fingerprint(left_channel, samplerate) fingerprint_right = fingerprint_energy_diff.get_fingerprint(right_channel, samplerate) print repr(fingerprint_left) print repr(fingerprint_right) # calculate hamming distance between fingerprints distance = hamming_distance(fingerprint_left, fingerprint_right) length = len(fingerprint_left) print length, distance print('Correlation %: '+str(1-float(distance)/float(length)))
from scipy import genfromtxt def move_right(fingerprint, steps): for i in range(steps): fingerprint = scipy.hstack((fingerprint[-1:], fingerprint[0:-1])) return fingerprint def move_left(fingerprint, steps): for i in range(steps): fingerprint = scipy.hstack((fingerprint[1:], fingerprint[0:1])) return fingerprint fingerprint1 = genfromtxt("server_fingerprint.txt") fingerprint2 = genfromtxt("client_fingerprint.txt") for i in range(1,10): print fingerprint1 print fingerprint2 hdistance = hamming_distance(fingerprint1, fingerprint2) length = len(fingerprint1) percent = 100-(float(hdistance)/float(length)*100) print i, hdistance, length, percent # move it! fingerprint2 = move_left(fingerprint2, i)