The only solution I've found is adding a simple field like that:
Field('no_spam', requires=IS_EQUAL_TO('4',error_message=T('Must be 4')), type='integer', label=T('2 + 2 ='), comment=T('Are you human?'))
Probably too simple but I don't have yet a better solution.