title: Why use the C# class System.Random at all instead of System.Security.Cryptography.RandomNumberGenerator?
body: <p>Why would anybody use the "standard" random number generator from <a href="http://msdn.microsoft.com/en-us/library/system.random.aspx" rel="noreferrer">System.Random</a> at all instead of always using the cryptographically secure random number generator from <a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.randomnumbergenerator.aspx" rel="noreferrer">System.Security.Cryptography.RandomNumberGenerator</a> (or its subclasses because RandomNumberGenerator is abstract)?</p>
  
  <p>Nate Lawson tells us in his Google Tech Talk presentation "<a href="https://youtu.be/ySQl0NhW1J0?t=788" rel="noreferrer">Crypto Strikes Back</a>" at minute 13:11 not to use the "standard" random number generators from Python, Java and C# and to instead use the cryptographically secure version.</p>
  
  <p>I know the difference between the two versions of random number generators (see <a href="https://stackoverflow.com/questions/101337/what-is-the-difference-between-a-randomly-generated-number-and-secure-randomly-ge">question 101337</a>).</p>
  
  <p>But what rationale is there to not always use the secure random number generator? Why use System.Random at all? Performance perhaps?</p>