Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Payment Authorizations - Consider the EMV SCA flow #180

Closed
cyberphone opened this issue May 24, 2024 · 7 comments
Closed

Payment Authorizations - Consider the EMV SCA flow #180

cyberphone opened this issue May 24, 2024 · 7 comments

Comments

@cyberphone
Copy link

cyberphone commented May 24, 2024

I hope nobody takes offence but traditional payment authorization systems like EMV (as well as Apple Pay), perform SCA (Strong Customer Authentication) in a very different way than schemes based on OAuth. The sequence diagram below should give you an idea. Core features of this flow include:

  • Simple and stateless operation.
  • Support for multi-phase transactions needed for gas-station payments, subscriptions, deposits, etc.
  • Support for arbitrary account-based payment networks without any wallet modifications.

In short it works like this: In step 4 a payer authorization object is created and then pushed (by the Merchant) onto the (for the selected payment credential suitable) payment backend for processing. Eventually the payer authorization object ends up at the Payer Bank (point T) where the actual verification takes place. More details can be found in: https://cyberphone.github.io/doc/saturn/saturn-core-flow.pdf.

The only drawback I'm aware of is that PII-related authorization data (like account and signature key id), must be encrypted. To maintain privacy, the encryption [public] key must be shared by multiple Payers. Merchants and payment intermediaries only need to know the end-point to the Payer's Bank and the payment method associated with the selected payment credential.

Although I have not tested it, using BLE, the Wallet should work without Internet connectivity, like payment cards always did.

That this flow isn't aligned with OAuth is not only due to historical reasons, but to the fact that the Merchant represents an additional entity, not covered by OAuth-based standards.

Screenshot 2024-05-24 at 15 23 42
@Sakurann
Copy link
Collaborator

Sakurann commented May 28, 2024

I don't think the proposal is to replace all steps 1-11 with OAuth or wallet-based model. If my understanding is correct, the proposal is to use OpenID4VP + transaction data in steps 2~5 in the diagram, when the user is being identified and user authorization is being gathered. (equivalent to this diagram in digitallabor-berlin document)

@cyberphone
Copy link
Author

cyberphone commented May 28, 2024

The following relates to this version of the specification:
https://github.com/digitallabor-berlin/eudiw-sca/blob/79bdb6ef3f5a074e0e8da7c9adbb8951d3baded0/openbanking-r2s.md.

Since this is an extremely complex topic, touching many different areas, including technical, regulatory, political, "theological", and commercial issues (and thus not overly suited for GitHub discussions), I will (try to) keep it brief 😉 If we stick to step 2-5, the second UI departs from how other wallets work. This is probably due to fact that in other payment authorization systems, Merchants are not relying parties of identities or credentials, but of money. That is, "when the user is being identified" would violate privacy by design principles. Based on the current specification it is not particularly clear what the authors had in mind with "verification" by the Merchant (Payee).

Wallet UI

Anyway, the bigger problem is actually in the other end: the monolithic nature of the Open Banking architecture promoted by the https://www.berlin-group.org/ is difficult to combine with new (and probably not entirely mature) developments, like the EU Identity Wallet. As an example, an EMV implementation was envisioned already back in 2020, but has not yet materialized. FWIW, I'm working with an Open Banking 2.0 architecture which should make the integration of arbitrary wallets, magnitudes faster and cheaper.

@cyberphone
Copy link
Author

cyberphone commented May 30, 2024

@Sakurann I don't know where this discussion should be held, but the mentioned specification requires more than twice as many protocol steps while offering half of the functionality compared to the almost 30 year old EMV standard (after applying a very modest update).

Maybe a more neutral party like https://www.sprind.org/en/ could take the lead? In particular, the two quite different ways of performing SCA (for payment authorizations only NB), would IMO greatly benefit from an independent study.

This matter seems a bit urgent since it has profound impact on the entire project, including the associated Open Banking API.
@tlodderstedt

@cyberphone cyberphone changed the title Payment Authorizations - The "other" method Payment Authorizations - Consider the EMV method Jun 1, 2024
@cyberphone
Copy link
Author

cyberphone commented Jun 11, 2024

Payment Wallets - Feature List

For the market (who neither care nor know anything about ARF, eIDAS, OAuth, EMV, Open Banking, SCA, etc.), the following picture is supposed to provide a reasonably fair description of the current status. For completeness, the "Gold Standard" is included as a reference.
wallet-openid-saturn-apple

@cyberphone
Copy link
Author

This issue is really about the SCA-flow and its implications. Given the lack of interest in this topic, I think it is reasonable to close it.

@cyberphone cyberphone changed the title Payment Authorizations - Consider the EMV method Payment Authorizations - Consider the EMV SCA flow Jun 23, 2024
@cyberphone
Copy link
Author

cyberphone commented Jul 2, 2024

Progress! The recently revised specification https://github.com/digitallabor-berlin/eudiw-sca/blob/ea5db12b59f583f79e3c866896565fa6c93ae2e4/openbanking-r2s.md seems like a MAJOR update.

1. Adoption of the EMV SCA flow

The previous ultra-complex flow which was "sort of" OAuth has apparently been abandoned. The current flow is now close to a carbon copy of "EMV on steroids". The only notable difference is that in my proposal, payer authorization requests are unsigned. There are many and good reasons for that.

2. UX Improvements

Payment authorization now only requires a single biometric/PIN step 😁
However, the spec. still talks about "Wallet asking the payer to consent to the presentation of a payment credential..." which is wrong. Merchants are not relying parties/verifiers. In addition, payer authorization is not about "presentation" of a payment credential, it is about using it, including its associated signature key.

3. Open Banking clarifications

A huge improvement is that the spec. now acknowledges that there is currently no suitable interface in banks:

Although currently there is no out of-the-box support for payment initiation using a verifiable presentation in existing OpenBanking standards like the Berlin Group yet, they already specify very similar concepts using a so called "signed payment request" within their Protocol Functions and Security Measures document for the OpenFinance framework, section 7.1

This is a horrible solution that I was personally involved in developing mid 2020 😱 Before publishing, I asked the ad-hoc WG to remove my name from the spec. since I had (during the work...) found a more agile concept which I also have tested in practice:
https://cyberphone.github.io/doc/defensive-publications/openbanking-evolution.pdf
AFAIK, the Berlin Group doesn't build PoCs.
@tlodderstedt @Sakurann @selfissued

@cyberphone
Copy link
Author

Since the DigitalLabor specification have over a period of only 6 months, gone through 3 completely different iterations, it seems that things are in flux, and would benefit from being spun off: #188

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants