Coffee Space


Listen:

reCAPTCHA Alternative

Preview Image

Disclaimer: This is just a quick idea based on a Hacker News thread. There is a nice list here of existing solutions too.

All good and well, but: Can I use these from lynx and without JavaScript?

The answer is no, as long as the browser cannot display images and/or JavaScript. Disappointing. Surely this is possible?

Wikipedia defines a CAPTCHA as:

A CAPTCHA (a contrived acronym for “completely automated public Turing test to tell computers and humans apart”) is a type of challenge–response test used in computing to determine whether or not the user is human.

So can it be text based? I think so. The important part of most CAPTCHAS are they are:

  1. Difficult to read, i.e. you cannot simply look-up what the solution may be or even easily understand part of the problem without enormous processing.
  2. Difficult to answer, i.e. you can’t easily guess and the probability of you doing so is quite low, hence the need to understand the CAPTCHA.

Problem Generation

So the simple answer could be to generate a text representation of an image. Many picture-to-ASCII converters exist out there. But ASCII fonts are cool and could probably fool computers quite well. You could do the following:

Example starting font characters (generated here):

0001    ,---,         /$$$$$$$
0002   '  .' \       | $$__  $$
0003  /  ;    '.     | $$  \ $$
0004 :  :       \    | $$$$$$$
0005 :  |   /\   \   | $$__  $$
0006 |  :  ' ;.   :  | $$  \ $$
0007 |  |  ;/  \   \ | $$$$$$$/
0008 '  :  | \  \ ,' |_______/
0009 |  |  '  '--'
0010 |  :  :
0011 |  | ,'
0012 `--''

Overlay:

0013    ,---,      /$$$$$$$
0014   '  .' \    | $$__  $$
0015  /  ;    '.  | $$  \ $$
0016 :  :       \ | $$$$$$$
0017 :  |   /\   \| $$__  $$
0018 |  :  ' ;.   : $$  \ $$
0019 |  |  ;/  \   \$$$$$$$/
0020 '  :  | \  \ ,'______/
0021 |  |  '  '--'
0022 |  :  :
0023 |  | ,'
0024 `--''

Random switching:

0025    ,-@-,      /@$#$=$@
0026   '  .' \    - $$__  $$
0027  |  ;    '.  | #$  \ $$
0028 :  :       \ - ==$@$#$
0029 :  |   /\   \| $$__  $$
0030 l  :  ' ;.   : @@  / #=
0031 |  |  ;/  /   \$$#=$$@/
0032 '  :  | \  \ ,'=__-__/
0033 |  #  '  '--'
0034 |  :  :
0035 =  | ,'
0036 `--''

Random additions and subtractions:

0037 p   -@-,  o   /@$#$=$ /
0038   '  .' \    - $$__  $ 
0039  |  ;     .    #     $$
0040 @     a    \ - ==$@ #$
0041 : r|    \   \| $$__  $ 
0042 l  :  ' ;.   : @@  / #=
0043 |  |  ;/  /     $#=$$@/
0044 '  :  | \    ,'=_ -__ 
0045    #  '  '- '       = £
0046 |  :  : r      @  --  |
0047 =    ,'     t      #  ~
0048 ` -''   + _   +   \   /

This was generated by hand - but I believe the point is clear. I believe a machine may struggle to read these letters, especially if an algorithm had made the changes. I believe this shows promise.

You would then prompt the user with something such as:

0049 Please type the above letters in the text box below.
0050  ______________
0051 |______________|
0052 
0053 [Submit] [Refresh]

Conclusion

This seems possible… When I get some free time I shall put this together.

There are some open problems:

These problems are unlikely and of course can be tackled in the future.