1

Deutsche Bank recently started forcing its customers to switch their transaction authentication from iTAN to PhotoTAN. Now I wanted to verify the authenticity of the Android app like this:

# jarsigner -verify -verbose:all -certs com.db.pbc.phototan.db-1.apk

s       11870 Mon Oct 02 12:46:02 CEST 2017 META-INF/MANIFEST.MF

       X.509, CN=George Georgiades, OU=GT AS Productivity & Collaboration Technologies, O=Deutsche Bank AG, L=London, ST=Unknown, C=UK
       [certificate is valid from 10/31/11 12:42 PM to 3/18/39 12:42 PM]
       [CertPath not validated: Path does not chain with any of the trust anchors]

       11991 Mon Oct 02 12:46:02 CEST 2017 META-INF/DBANDROI.SF
        1525 Mon Oct 02 12:46:02 CEST 2017 META-INF/DBANDROI.RSA
sm      3468 Fri Nov 30 01:00:00 CET 1979 AndroidManifest.xml

       X.509, CN=George Georgiades, OU=GT AS Productivity & Collaboration Technologies, O=Deutsche Bank AG, L=London, ST=Unknown, C=UK
       [certificate is valid from 10/31/11 12:42 PM to 3/18/39 12:42 PM]
       [CertPath not validated: Path does not chain with any of the trust anchors]

... and so on, for all files in the APK. So naturally I wonder who this George Georgiades is and why he doesn't have a trust chain:

# unzip -p com.db.pbc.phototan.db-1.apk META-INF/DBANDROI.RSA | openssl pkcs7 -inform DER -noout -print_certs -text

Certificate:
Certificate:
Data:
    Version: 3 (0x2)
    Serial Number: 705392378 (0x2a0b6efa)
Signature Algorithm: sha256WithRSAEncryption
    Issuer: C=UK, ST=Unknown, L=London, O=Deutsche Bank AG, OU=GT AS Productivity & Collaboration Technologies, CN=George Georgiades
    Validity
        Not Before: Oct 31 11:42:49 2011 GMT
        Not After : Mar 18 11:42:49 2039 GMT
    Subject: C=UK, ST=Unknown, L=London, O=Deutsche Bank AG, OU=GT AS Productivity & Collaboration Technologies, CN=George Georgiades
    Subject Public Key Info:
        Public Key Algorithm: rsaEncryption
            Public-Key: (2048 bit)
            Modulus:
                00:99:e5:d6:19:be:44:f7:f6:36:69:00:fd:01:28:
                7b:d0:5c:5d:84:52:d2:69:46:1c:d7:23:88:0a:4e:
                a8:51:71:2b:29:65:5f:97:92:d6:d8:c0:c2:22:84:
                e8:ae:ad:98:55:76:82:36:7e:94:1e:cc:7f:80:c1:
                0c:c3:1f:30:b2:f7:35:e9:24:2d:68:b6:a6:15:2c:
                12:d4:f3:cc:35:09:3c:fc:7f:b2:8b:3c:eb:98:7a:
                52:7a:11:f4:f0:81:55:d0:7c:80:ae:0e:fb:83:4f:
                76:32:53:1b:a3:4b:78:20:68:6e:d9:0f:16:46:d4:
                40:e7:fb:47:59:8f:9f:95:a4:68:c4:78:d9:37:c5:
                e4:5f:16:84:9e:9c:3b:d1:9c:c5:73:c3:35:87:67:
                8c:f4:cd:af:eb:70:f1:f9:ac:8c:bd:b2:13:8c:d3:
                60:ae:b2:25:e5:41:af:1a:0f:0c:85:dc:87:70:c9:
                41:73:e5:77:52:3f:61:ad:bc:99:18:7b:37:5d:a9:
                bc:53:1b:7e:4e:52:a4:15:7d:7a:7d:22:fa:2b:f5:
                0f:7e:26:70:6d:c4:e6:f6:47:f7:c9:1d:38:01:e0:
                36:3d:24:4a:f2:f1:08:33:3a:f6:fc:5e:4b:a3:cf:
                a7:ee:fc:54:fc:95:2b:ef:71:6e:36:f3:d5:c4:8b:
                9e:1f
            Exponent: 65537 (0x10001)
    X509v3 extensions:
        X509v3 Subject Key Identifier: 
            5F:11:C3:FC:CD:7C:20:B9:10:4D:04:22:32:37:90:B3:85:EB:A6:DF
Signature Algorithm: sha256WithRSAEncryption
     20:21:b3:48:89:14:5d:30:53:3a:7f:72:cf:4b:4c:84:f8:c3:
     3b:4d:2c:9f:58:b9:d6:6c:fc:ef:8f:81:c2:4a:07:97:5e:28:
     10:3e:b3:6a:4b:9b:38:2b:8e:ca:07:a0:ae:aa:b8:3f:45:11:
     b5:84:62:2c:03:67:66:76:9c:d4:2b:b0:5b:15:45:86:9e:01:
     41:5c:1c:ea:9c:36:d0:ef:e3:ab:a4:3f:54:ae:2f:e9:b0:63:
     5f:c1:a2:e4:5b:d0:5d:66:a8:3c:d4:db:54:38:e1:b2:60:ba:
     c9:48:b7:ed:39:e9:fb:47:63:b4:17:ca:d4:2c:56:2f:d5:82:
     50:77:b6:46:d5:ca:b6:cf:8f:6a:34:d6:ba:2b:05:c9:04:7b:
     65:a8:ea:72:18:2d:f2:fa:e8:7c:1b:92:44:24:dd:e0:e6:47:
     9a:88:bc:a4:82:85:d2:8f:45:1c:41:3b:84:08:80:7c:cf:98:
     2d:90:06:f9:e1:c9:08:a3:26:6d:64:a2:f7:38:f0:4a:05:b1:
     ef:84:d4:e6:df:a4:4e:fc:f0:11:c0:0d:1d:bc:6e:8d:11:22:
     09:52:37:bb:52:d8:5e:70:d4:50:02:36:d5:bd:ed:bf:ba:1e:
     eb:34:e2:17:ec:9d:6f:4c:7f:4e:9f:b0:e7:4c:2a:17:57:50:
     2e:72:83:e1

So now I'm thinking WTF is going on?? Why is the transaction authenticator of Deutsche Bank apparently being developed by some dude in London who uses a self-signed certificate to sign it? Either I'm very confused about how Android app security is supposed to work, or the app is a forgery, or this is just highly unprofessional. Which one is it?

1

I'm very confused about how Android app security is supposed to work

Android apps generally use self-signed certificates for signing the APK. The signing key is not there to establish real-world identity, but is solely for comparison purposes with the signing keys used by other APKs and the firmware installed on the device. For example, for one APK to serve as an update for an installed APK, both APKs need to by signed by the same signing key (up until Android 9.0, when the story started to get a bit more complicated).

I suppose it is possible for an app to use a CA-backed certificate for signing the APK. I have never done it that way myself, and the Android developer documentation shows using a self-signed certificate.

  • Interesting. So I can see that this might be an acceptable practice for uncritical apps, but given the fact that this is a transaction authenticator, I'd like to be able to verify that the app I'm using is actually authentic. So I guess the only way to do that is to call up the bank and have them compare the signing certificate's key ID...? – Victor Mataré Sep 29 '18 at 15:43
  • @VictorMataré: I would be somewhat surprised if Deutsche Bank will be in position to do that for you. For some apps, digital asset links offer a way to confirm that the operators of a Web site (e.g., db.com) have control over the signing key used for their Android app. I am not aware of any user tools that can validate those, but I haven't looked for one recently, and I do not know if Deutsche Bank's app uses digital asset links anyway. – CommonsWare Sep 29 '18 at 17:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.