this page was last updated on
Thu Jun 24 09:07:13 CEST 1999
this protocol was decoded by W.J.Hengeveld
hier staat de (oudere) text versie van dit document.
hier is een korte beschrijving van het viditel
protocol
na het inlog scherm: (pagina 900001a)
- girotelnummer: xxxxxx
- codenummer: xxxxxx
- "_" (= viewdata enter)
dan komt het welkom scherm (pagina 1005a)
regel | inhoud | omschrijving
|
---|
1 | datum (dd-mm-yyyy) | server datum
|
2 | tijd (hh.mm.ss) | server tijd
|
3 | "0603" | server versie nummer
|
4 | nr1 | challenge
|
5 | "0 017 0" | onbekend, volgNrTAN, onbekend
|
6 | | -optioneel-
|
7 | naam | account holder
|
8 | lastdate (dd-mm-yyyy) | last logon date
|
9 | lasttime (hh.mm.ss) | last logon time
|
10 | | -optioneel-
|
11 | | -optioneel-
|
12 | | -optioneel-
|
13 | | -optioneel-
|
14 | | -
|
15 | | -
|
16 | 000 000 000 000 000 000 000 | Volgnrs: Mut, Beleg, Saldi, Spaar, Perc, EffInfo, EffSaldi
|
17 | 0000000000000000 | checksum
|
18 | | -
|
19 | | -
|
20 | | -
|
21 | | -
|
22 | | -optioneel-
|
23 | | -optioneel-
|
de checksum is de som van de volgende getallen:
- de server datum als getal: ddmmyyyy
- de server tijd als getal: hhmmss
- de server versie
- de 7 volgnrs
- de challenge
then transmitted:
7 x 3 digit decimal | volgnrs Mut, Beleg, Saldi, Spaar, Perc, EffInfo, EffSaldi
|
7 digits | gironr1
|
yyyymmdd | girodatum1
|
16 digits | header checksum
|
7 digits | gironr2
|
yyyymmdd | girodatum2
|
"N" | "J" = new user ? (bij gtwin "1"
|
"N" | "J" = change GIN?
|
"N" | bij gtwin "3"
|
6 hex digits | authentication (see below)
|
050 | of 839
|
7 digits | gironr3
|
yyyymmdd | girodatum3
|
7 digits | gironr4
|
yyyymmdd | girodatum4
|
7 digits | gironr5
|
yyyymmdd | girodatum5
|
0603 | client protocol versie
|
"_" (viewdata enter)
|
The headerchecksum is the decimal sum of the following values:
- giro1 - giro5
- girodatum1 - girodatum5
- the 7 volgnrs
- client version
The order of the volgnrs is not quite sure yet.
The authentication value is calculated as follows: (zie ook deze source code)
ik definieer hiervoor de volgende functies:
- ciphertext = desenc(key, plaintext)
- deze functie vercijfert de plaintext met de key, het
resultaat komt in ciphertext, dit is de standaard DES
encryptie
- encoded = encode(text)
- deze functie spreidt de bits van ascii karakters van spatie - tilde
wat meer uit over de 8 bits ruimte die daar beschikbaar voor is.
(zie verder)
- key = encode(challenge)
- plain = encode(GIN + substr(girotelcode, 1, 2))
This is the 6 digits of the GIN followed by the
first 2 of the girotel codenr
- auth = desenc(key, plain) ^ plain
this is the plaintext xored with the result of the
DES encryption
- the authentication code is the first 6 hex digits of this 'auth' value
the 'encode function':
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f
|
---|
00:
| 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00
|
10:
| 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00
|
20:
| 0x40 | 0x5A | 0x7F | 0x5B | 0x4A | 0x6C | 0x50 | 0x7D | 0x4D | 0x5D | 0x5C | 0x4E | 0x6B | 0x60 | 0x4B | 0x61
|
30:
| 0xF0 | 0xF1 | 0xF2 | 0xF3 | 0xF4 | 0xF5 | 0xF6 | 0xF7 | 0xF8 | 0xF9 | 0x7A | 0x5E | 0x4C | 0x7E | 0x6E | 0x6F
|
40:
| 0x7C | 0xC1 | 0xC2 | 0xC3 | 0xC4 | 0xC5 | 0xC6 | 0xC7 | 0xC8 | 0xC9 | 0xD1 | 0xD2 | 0xD3 | 0xD4 | 0xD5 | 0xD6
|
50:
| 0xD7 | 0xD8 | 0xD9 | 0xE2 | 0xE3 | 0xE4 | 0xE5 | 0xE6 | 0xE7 | 0xE8 | 0xE9 | 0xAD | 0xE0 | 0xBD | 0x5F | 0x7B
|
60:
| 0x6D | 0x81 | 0x82 | 0x83 | 0x84 | 0x85 | 0x86 | 0x87 | 0x88 | 0x89 | 0x91 | 0x92 | 0x93 | 0x94 | 0x95 | 0x96
|
70:
| 0x97 | 0x98 | 0x99 | 0xA2 | 0xA3 | 0xA4 | 0xA5 | 0xA6 | 0xA7 | 0xA8 | 0xA9 | 0xC0 | 0x6A | 0xD0 | 0xA1 | 0x00
|
80:
| 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00
|
then the server echos all this data, a POSTBANK string is sent.
- page nr 1780a
- "A"rep11"050
Then these records are transmitted to the client:
- type 27 - koersen beleggings fondsen
- type 28 - rente spaarrekeningen
- type 23 - saldo girorekening
- type 24 - saldo spaarrekeningen
- type 20 - uitgevoerde transacties
Followed by 'A00001065003020' the packet header
followed by '99|'
followed by '__'
Followed by 'A00001065003020' the packet header
followed by '99|'
followed by 'B..........0020' the packet header
followed by more type 20 transaction records
followed by 'B00000000000020' the packet header
followed by 'C..........6020' the packet header
the letter keeps increasing with every batch of updates
followed by a type 32 record
transactions(type 01 and 02) are sent after a 'A..........1180' message.
after transactions are submitted a summary (type 12 records)
is sent back to the client, after that the transaction is authorised
by sending some cryptogrpahic hash (type 96 record)
the packet header
- a sequence letter 'A' .. 'Z'
- a 8 digit checksum
- a 3 digit lenght, of the following packet
- a 3 digit packet type: 020, 050, 100, 120, 180, 340, 839
the checksum is the sum of the encoded packet contents, each multiplied by its position.
for(i=0 ; i<packet.length ; i++)
sum += (i+1) * encode(packet.byte[i]);
the the packet follows.
the packet consists of transaction records of the following format:
- a 2 digit transaction type
- data, terminated by a pipe symbol '|'
transaction types:
- AC - accept giro
- BA - betaal automaat
- CH - cheque
- DV - diversen: kosten gebruik girotel
- GB - girobetaalkaart + nummer
- GF - girofoon
- GM - giromaat opname
- GT - girotel-opdracht + nummer
- IC - incasso
- KC - kascheque
- OV - overschrijving
- PK - postkantoor
- PO - periodieke overschrijving
- ST - storting
- TA - tele-accept
- VZ - verzamelgiro
rekening typen:
- 1 renterekening
- 2 plusrekening
- 3 sterrekening
- 4 leeuwrekening
- 5 kapitaalrekening
beleggings fondsen:
- 1 beleggingsfonds
- 2 vermogensgroeifonds
- 3 aandelenfonds
- 4 obligatiefonds
- 5 spaardividendfonds
- 6 spaargroeifonds
- 7 nederlandfonds
- 8 i.t.fonds
- 9 nettorentefonds
transaction records are delimited by "|"
transaction records look like this:
bedragen worden genoteerd als volgt:
- "NLG@nnnnnn" : nnnn.nn gulden
- "EUR@nnnnnn" : nnnn.nn euro
- "nnnnnn" : nnnn.nn gulden
record type 01 : plaats reservering
- (2) record type: 01
- number - reserverings nummer
- "+"
- (7) van gironummer
- "+"
- bedrag in centen
- "+"
- naar rekening nummer
- "+"
- (8) datum: yyyymmdd (voer mutatie uit op . )
- "+"
- "@"
- regel 1 omschrijving
- "@"
- regel 2 omschrijving
- "@"
- "~"
met een type 12 packet wordt de naam van de rekening houder
geretourneerd.
record type 02 : plaats reservering
- (2) record type: 02
- number
- "+"
- (7) van gironummer
- "+"
- bedrag in centen
- "+"
- naar rekening nummer
- "+"
- (8) datum: yyyymmdd (voer mutatie uit op . )
- "+"
- (16) betalings kenmerk - optioneel
- "@"
- naam begunstigde
- "@"
- regel 1 omschrijving
- "@"
- regel 2 omschrijving
- "@"
record type 09 : intrekken reservering
- (2) record type 09
- number
- "+"
- (7) gironummer
- "+"
- bedrag in centen
- "+"
- (8) datum: yyyymmdd (voer mutatie uit op . )
- "+"
- (2) mutatie nummer
- "+"
record type 12 : server bevestiging van reservering
- (2) record type: 12
- number
- "+"
- naam rekening houder
- "@"
- number - girotel mutatie nummer
- "+"
record type 13 : server: error in type 01 pakket
- (2) record type: 13
- number
- "+"
- mutatie nummer
- "@"
record type 14 : commit, or end of transmission ?
record type 20 : mutatie record
- (2) record type: 20
- (7) van gironummer
- "+"
- (8) datum: yyyymmdd
- "+"
- (2) transaction type: BA, DV, GM, GT, IC, OV, PK, VZ
- "@"
- volgnummer mutatie
- "+"
- number
- "+"
- letter: A of B
- "@"
- "M"
- "@"
- bedrag in centen
- "+"
- naar rekening nummer
- "+"
- "@"
- naam begunstigde
- "@"
- omschrijving (max 32 chars per regel)
- meer regels: max 4, gescheiden door '@"
- "@"
- "~"
record type 21 : nog niet uitgevoerde transactie(reservering)
- (2) record type: 21
- (7) van gironummer
- "+"
- (8) datum: yyyymmdd
- "+"
- (2) mutatie nummer: 25
- "+"
- (1) letter: A of B
- "@"
- bedrag in centen
- "+"
- naar gironummer
- "+"
- "@"
- naam begunstigde
- "@"
- omschrijving
- "@"
- "~"
record type 22 : bericht
- (2) record type: 22
- "0"
- "+"
- bericht text, regels gescheiden door "@"
- "~"
record type 23 : saldo girorekening
- (2) record type: 23
- (7) gironummer
- "+"
- number : saldo girorekening in centen
- "+" of "-"
- (8) datum: yyyymmdd
- "+"
- number
- "@"
record type 24 : saldo spaar rekeningen
- (2) record type: 24
- (7) gironummer
- "+"
- number : rekening type : 2 = plusrekening
- "+"
- number : saldo rekening
- "+" of "-"
- (8) datum: yyyymmdd
- "+"
record type 27 : koersen beleggings fondsen
- (2) record type: 27
- number : fonds type
- "+"
- (8) datum: yyyymmdd
- "+"
- number : koers
- "+"
- (8) datum: yyyymmdd
- "+"
- (8) datum: yyyymmdd
- "+"
record type 28 : rente spaarrekeningen
- (2) record type 28
- (number : spaarrekening type
- "+"
- number : rente1 in 1/1000 %
- "+"
- number : rente2 in 1/1000 %
- "+"
- number : hoge rente vanaf bedrag (in guldens)
- "+"
optional part:
- "NLG@" + bedrag
- "+"
- number
- "+"
record type 32 :
- (2) record type 32
- number (bedrag)
- "+"
- number (bedrag)
- "+"
- number
- "+"
- number (bedrag)
- "+"
- number (bedrag)
- "+"
- number
- "+"
- number (bedrag)
- "+"
- number (bedrag)
- "+"
- number
- "+"
- number (bedrag)
- "+"
- number (bedrag)
- "+"
- number
- "+"
- number
- "+"
- number
- "+"
- number
- "+"
record type 33 : euro conversie factor
- euro factor, with "," as decimal point
- "@"
record type 80 : file transfer
- (2) record type 80
- (4) file update status
- (4) number
- file entries
fileentry:
- (11) naam (8+3 zonder '.')
- (7) number of bytes to follow
- encoding: 86 * 2 hex digits specifying how characters are represented
starting from 0x20 - 0x7f,
excluded: 0x20 0x21 0x23 0x24 0x2a 0x40 0x7c 0x7f, and 2 unknown others
- file data, encoded by the here fore defined encoding
record type 81 : change GIN
- (2) record type 81
- (16) hex key 1
- "@"
record type 96 : authorize with TAN
- (2) record type 96
- (16) hex key 1 (depends on session)
- "@"
- (16) hex key 2 (depends on TAN + session)
- "@"
record type 97 : end of session(?)
record type 98 : authorization result
- (2) record type 98
- (1) number
- "+"
- (1) letter: "N"=failed or "J"=ok
- "@"
record type 99 : end of data exchange(?) - signals client should send possible TAN.
looking at appl.exe:
*14090520_ ?? special page