Authentication is necessary and the importance cannot be overemphasized as we live in a world were we struggle with the need for privacy (The argument about Privacy being a good thing or a necessary human right is an argument that can totally go on for years) ,crimes and many other important reasons why you may want to protect data/Information. The need to keep these Information private to a set of people has led to the concept of Authentication. Another major struggle we face is making sure that the Authentication techniques/methods available to us are as secure as possible with respect to known attacks and to some extent Zero-day attacks.
“The argument about the need for privacy being a necessary human right is an argument that can totally go on for years. Crime is also perpetuated daily and the guys on the bad side of the law could also argue that privacy should be a human right so as to stay under the radar and prevent getting caught. So it’s usually two sides to the debate..”
Hashing is basically a mix of a random string of characters together to mask an actual string, letter or characters. Hashing is passing characters into an algorithm to transform those characters into something that is not easily understood by an entity not familiar with the particular algorithm used.
Inasmuch as the authentication schemes that have been put in place are somewhat useful. These schemes are largely vulnerable due to the human factor in play in the authentication models. The interaction between systems, these schemes and checks largely depend on the human. The problem with the schemes available for authentication is the fact that everything a human can think of is computable by a computer in N time. The imperfection and faults in humans lead to a major compromise in the effectiveness of these security schemes.
In creating Hash tables for dictionary attacks. It’s always been a debate to choose what factor you’d like to give up between memory/storage and speed. It used to be a struggle to compute a whole dictionary of hashes and try a brute force attack. The problem with this is it takes up so much memory as all the hashes are already pre-computed and stored in the dictionary. The advantage of this was. It didn’t take up as much time depending on the strength of the password and the accuracy of the dictionary
Rainbow tables were the best alternatives for cracking passwords. It supported the time-memory trade-off. It uses the binary search to go through the tables and it doesn’t store any hashes. It is relatively faster than performing linear searches with normal hash tables.
The safest way is to not choose. Human passwords have very low entropies. Most people choose passwords from names, birthdays, events. Mainly things they hold dear which is never random enough making it relatively easy, less time consuming to recover
– If you ever have to choose a password, choose a password that has completely nothing to do with you. That way it gets totally hard for an attacker to design a dictionary tailored for you.
Challenge-Response is simply an added level of authentication where a client/user receives a challenge from a server to prove the client is the original person trying to get authenticated. The client then sends a response confirming the client knows the password. This scheme also uses a property called Zero-Knowledge. The main objective of the challenge-response scheme is to prevent attackers from running a replay attack on an already successful protocol run, authentication etc.