title: When can you trust yourself to implement cryptography based solutions?
body: <p>I've read quite a few times how I <a href="http://blogs.msdn.com/ericlippert/archive/2009/12/14/use-the-right-tool-for-the-job.aspx" rel="noreferrer">shouldn't</a> use <a href="http://www.codinghorror.com/blog/archives/001267.html" rel="noreferrer">cryptography</a> if I'm not an expert. Basically both Jeff and Eric tell you the same:</p>
  
  <blockquote>
    <p>Cryptography is difficult, better buy the security solution from experts than doing it yourself.</p>
  </blockquote>
  
  <p>I completely agree, for a start it's incredibly difficult to perceive all possible paths an scenario might take, all the possible attacks against it and against your solution... but then When should we use it?</p>
  
  <p>I will face in a few months with the task of providing a security solution to a preexisting solution we have. That is, we exchange data between servers, second phase of the project is providing good security to it. Buying a third party solution will eat up the budget anyway so ... When is it good to use cryptography for a security solution? Even if you are not a TOP expert.</p>
  
  <p><strong>Edit:</strong> To clarify due to some comments.
  The project is based on data transport across network locations, the current implementation allows for a security layer to be placed before transport and we can make any changes in implementation we like (assuming reasonable changes, the architecture is well design so changes should have an acceptable impact). The question revolves around this phrase from Eric Lippert:</p>
  
  <blockquote>
    <p>I don’t know nearly enough about cryptography to safely design or implement a crypto-based security system.</p>
  </blockquote>
  
  <p>We're not talking about reinventing the wheel, I had in mind a certain schema when I designed the system that implied secure key exchange, encryption and decryption and some other "counter measures" (man in the middle, etc) using C# .NET and the included cryptography primitives, but I'm by no means an expert in the field so when I read that, I of course <strong>start doubting myself. Am I even capable of implementing a secure system?</strong> Would it always be parts of the system that will be insecure unless I subcontract that part?</p>