Tiger and Tiger Tiger

TTH means Tiger Tree Hash. It is the Tiger-algorithm that is used as a tree.
The Tiger algoritm isn’t the same as the Tiger Tree algoritm and I’ll explain later what’s the difference.

‘Rövarspråket’ (RS) (”Pirate language”) is a known Swedish “encrypting algorithm”. The algotihm takes inputted data and adds to all consonants ‘o’ and then the same consonant. All vowels stay the same. Eg, if “Hello” was run through the RS algorithm, it would come out as “Hohelollolo”. If you know the RS algorithm, you can also decrypts messages. This is of course because the algorithm is very simple. (You may have heard of ‘piglatin’? It is also an “encrypting algorithm” that is very simple.)

The Tiger algorithm work basically the same. Data is run through the Tiger algorithm, and out comes a string, a ‘hash’, that is unique for the data. A huge difference between the Tiger and the RS algorithm is that you can’t reverse engineer the hash to see what the data is. (This is one of the points with hashes.)

(To) hash = the act of putting data through an encrypting algorithm.
(A) hash = encrypted data in the form of a string.
Hashes = encrypts = creates a hash. Alt: hashes = plural form of “a hash”.

What’s the difference between the Tiger and Tiger Tree algorithm then? The difference is that the Tiger algorithm takes the entire data and hashes it whereas the Tiger Tree algorithm breakes down the data into chunks or branches (you’ll soon understand why I use ‘branches’) and hashes every branch until a root hash been created.

Let me illustrate with an example.
Consider you have a file consisting of random data. The file size is 27 kB. We’ll call it FILE.
Consider now that you create a tree (you know, you’ll have to go outside to see one). At the bottom of this tree, there is what we call ‘root’ (in the real world, ‘root’ is the base of the tree…). From this base or root, three large branches has been grown. We call these branches LB1, LB2 and LB3. (”Large branch <number>”) From each of these LBs, three smaller branches grow. We call these MB1, MB2, … MB9. (”Medium branch <number>”) From each of these MBs, three even smaller branches grow. We call these SB1, SB2, … SB27. (”Small branch <number>”)

The Tiger algorithm now creates a hash from the first 1 kB of FILE and puts the hash inside SB1. Then the algoritm creates a hash for the next 1 kB of FILE and puts the hash inside SB2. And so on until all 27 SBs contain a hash.

The Tiger algorithm now takes the hashes on the SBs on MB1 and hashes them and puts the hash in MB1. That sounded confusing even to me. The hashes that is inside SB1, SB2 and SB3 is put together so it’s like one string. The hashes are just concatenated. So it’ll appear as “SB1SB2SB3″. This string is now hashed and put inside of MB1. The same happens for MB2 with “SB4SB5SB6″ etcetera.

So, we started with 27 branches. Then we hashed them together so we now got 9 hashes, MBs.

Next, since MB1, MB2 and MB3 is on the LB1 branch, they are hashed together. In the same way the SBs was hashed together to a MB. We do this of course with LB2 and LB3.

Now we have tree hashes, LBs. These hashes are now, like before, concatenated and hashed. This hash in then put in the root, or base.

This hash we have now at the root, is what you see in DC++ as ‘TTH root’.

The tiger algorithm doesn’t look at the size of the file. Nor at the fact that the file is called FILE. I just chose 27 kB because it was easy to count with it.

You can see also see information how DC++ stores the hashes.

More information about hashes here.

One Response to “Tiger and Tiger Tiger”

  1. DC++: Just These Guys, Ya Know? » Blog Archive » ADC! Says:

    […] For the common man, this is what ADC will bring (though, not necessarily will be in DC++); * Secure overall communication. This means the use of SSL (secure socket layer). * Secure password. This means it is impossible(1) for other people to find out what your password is when you’re logging into a hub. (Not depending on above.) * When searching, you can use regular expressions to accurately find what you are looking for * You can change nick when you are still connected to the hub (provided the hub allow you to). * Due to the identification scheme in ADC, different shares in hubs is possible. * Using partial file listing. * All text (between you and other users) are in UTF-8. This means that Chinese people can write symbols and everyone sees them properly. Basically, any type of letter/symbol in any language will be viewable. * A native support for hashes (every client have to serve hashes). * If the hub chooses to, it can avoid sending main chat messages if you don’t want them. * Native support for “/me” (”* ullner is now away”). (That is, speaking in third person.) * Responses to searches can now be directed properly. […]

Leave a Reply

You must be logged in to post a comment.