Things already known to adversary before planning an attack This is a very basic and practical question. Since I started reading cryptography recently, these things keep bugging me.

What are the things that an adversary is usually aware of before planning an attack?
Let's say an adversary plans an attack on a server of a big company.


Does he know what encryption scheme/model is being used by the company to protect its data stored in the server?


I think usually companies use very standard and popular schemes that are known already to the cryptographic community since using a totally unknown scheme might have a huge data leakage which the company was not able to discover.


Let's say adversary knows about the model. So what about the specific functions that are used in them. For eg. Pseudorandom generators used in stream ciphers(obviously, the key is not known), or S-box in case of DES etc. Are these things known to the adversary already?


I think these things are usually fixed while implementing the model. And even if these things are known, for example S-box in DES is known, it still won't change the security of the scheme. But even if the company tried to hide the above functions, can it actually increase the security of the data?


Keys


I think this is mainly the information that separates the user and the adversary. But can you tell what are the other things that are hidden in practical implementations?

My assumptions are based on the quote that one should only use encryption schemes that are trusted by the cryptography community. Else there is a high probability that there can be an unknown leakage that an adversary can exploit.
I think usually companies use very standard and popular schemes that are known already to the cryptographic community since using a totally unknown scheme might have a huge data leakage which the company was not able to discover.


Definitely. And remind yourself that implementing cryptography is hard as well. Self made schemes may have side channel attacks, data leaks and whatnot.

Quite often the algorithms that are used are known in advance. They are in design documents, leaks by developers, can be determined from the protocol configuration directly, are specified to certification agencies etc. etc. etc. So we simply assume that Kerckhoff's principle applies.

This is also why cryptographers don't take people seriously when they are confronted with a ciphertext without specifying the algorithm. Finding the algorithms is generally not the problem we're trying to solve.


  I think these things are usually fixed while implementing the model. And even if these things are known, for example S-box in DES is known, it still won't change the security of the scheme. But even if the company tried to hide the above functions, can it actually increase the security of the data?


The same applies as in the above.


  I think this is mainly the information that separates the user and the adversary. But can you tell what are the other things that are hidden in practical implementations?


Anything that is known as a secret. That includes keys, but also passwords, PIN, biometric data (where applicable). Besides keeping things secret, there are of course also other counter measures such as access conditions, number of retries and whatnot. A system never solely relies on cryptography, i.e. cryptography is never the solution, but it may be part of a solution.




  My assumptions are based on the quote that one should only use encryption schemes that are trusted by the cryptography community. Else there is a high probability that there can be an unknown leakage that an adversary can exploit. 


Correct. As Bruce Schneier famously summed it up:


  Anyone, from the most clueless amateur to the best cryptographer, can create an algorithm that he himself can't break.


with a corollary from Cory Doctorow :


  any person can invent a security system so clever that she or he can't think of how to break it.