Skip to content
  1. Jun 22, 2017
  2. Jul 28, 2015
  3. May 12, 2014
    • Dmitry Chestnykh's avatar
      Generate captcha representations deterministically. · 90158fbe
      Dmitry Chestnykh authored
      WARNING: introduces API incompatibility!
      
      This package generates captcha representations on-the-fly; for instance,
      if captcha solution was "123456", every call to NewImage() using this
      sequence of digits would generate a different random image containing
      "123456"; similarly, NewAudio() would generate a different audio
      pronouncing the same sequence: 1, 2, 3, 4, 5, 6.
      
      If a user, instead of storing generated outputs, exposes this
      functionality from their server, which is the default and recommended
      behaviour, an attacker could try loading the same image or audio over
      and over again in attempt to arrive at the most correct optical/voice
      recognition result.
      
      Instead of using a global non-deterministic pseudorandom number
      generator to distort images and audio, this commit introduces a
      deterministic PRNG for each image/audio. This PRNG uses a combination of
      a global secret key (generated once during initialization from a system
      CSPRNG) and captcha id and solution to produce pseudorandom numbers for
      each representation deterministically. Thus, calling NewImage() with the
      same captcha id and solution at different times will result in the same
      image (ditto for NewAudio).
      
      To make results unique not only for different solutions, but also for
      ids, these incompatible changes to public API have been introduced:
      
      NewImage and NewAudio changed from:
      
        func NewImage(digits []byte, width, height int) *Image
        func NewAudio(digits []byte, lang string) *Audio
      
      to:
      
        func NewImage(id string, digits []byte, width, height int) *Image
        func NewAudio(id string, digits []byte, lang string) *Audio
      
      That is, they now accept an additional captcha `id` argument.
      No other interfaces changed.
      
      Described changes also improved performance of generating captchas.
      90158fbe
  4. Dec 11, 2013
  5. Dec 03, 2013
  6. Mar 11, 2012
  7. Jan 16, 2012
  8. Jun 29, 2011
  9. May 11, 2011
  10. Apr 28, 2011
  11. Apr 27, 2011
  12. Apr 26, 2011