There is more information available by now.
See the Onespan (Vasco aquired Cronto and renamed itself) Community for the Integration Guide. It explains how to use their software to both GenerateCrontoSign/GenerateDynamicCrontoImage to generate Challenge graphics and QRCodeScannerSDKActivity/QRCodeScannerSDKViewController to scan and decode Graphics on Android/iOS.
Cronto is encoding Challenges and Tokens in a Colored Dot Matrix. Please see the Colored QR Codes whitepapers listed on the Wikipedia article for details on the information storage/extraction from the graphics or returned when searching for "decode color qr code"
Decoding Algorithm for color QR code: A Mobile Scanner Application
Nivedan Bhardwaj, et al.
Robust and Fast Decoding of High-Capacity Color QR Codes for Mobile Applications
Zhibo Yang, et al.
This in a way is the communication between the Bank and your OTP Token Generator. The secret is exchanged using two activation graphics, ie. the first sent via letter from your bank to you and a second (probably containing the secret) scanned during the activation process step2.
Using this secret the Cronto device will generate a OTP password after showing you the information given in the image. As I have not analysed the implementation of the QRCodeScanner I have my doubts whether it also includes the information into generating the photoTAN.
I have been able to use the secret for other OTP challenge/response in multiple OTP generators, ie. the Smartphone App of comdirect claims to support upto eight different bank accounts and therefor secrets. Hence it is possible the eavesdrop on the secret in the instance when it is visually handed over to the Cronto device (most likely step 2 of the activation process).
I just checked the Cronto I got some hours ago and it always generates the same TAN number, hence it is clearly not using any timing code.
Looking into the Image Scanner SDK available from the OneSpan / Cronto Website there are two main components to the Android AAR (QRCodeScannerSDK.aar):
- an API contained in classes.jar, this is a mostly obfuscated Wrapper that deals with some Image preprocessing
- a precompiled Linux ELF image libQRCronto.so, which contains the zxing matrix code library plus some cryptographic routines.
Image Scanner SDK
I have not bothered decompiling it, but it should be possible to find the crypto scheme out in case someone wants to:
$ strings libQRCronto.so | less
The following lab article has some details on creating a secure channel using the Mobile App instead of the standalone device I have.
Secure Offline Transaction Signing using MAS
The device I have has been modified from the Stock OneSpan Cronto by my bank. It is sporting a Bank logo on the power up screen and will refuse activation codes from other banks.
Entris Banking - Login with CrontoSign Swiss