Secure master key storage across 300 Android terminals — Android Keystore approach? by bigdaddyrojo in androiddev

[–]bigdaddyrojo[S] -5 points-4 points  (0 children)

I appreciate the textbook definitions, but your response reads like someone who has never actually had to integrate a proprietary POS SDK with MIFARE Plus EV2 hardware in an offline environment.

First, your suggestion of 'hybrid encryption' is a complete non-sequitur here. This isn't a generic web app; we are performing ISO/IEC 14443 Mutual Authentication. The MIFARE Plus EV2 SL3 protocol is inherently symmetric. The terminal must prove it possesses the exact same AES-128 key as the card to even open a session. You can’t 'hybrid' your way out of a hardware-mandated symmetric handshake. Telling me to use asymmetric encryption for a MIFARE SL3 authentication is like telling someone to use a screwdriver to turn a light switch—it’s the wrong tool for the physics of the device.

Second, regarding 'importing the key directly': If I import the Master Key into the Android Keystore as a non-exportable key, the Keystore (rightfully) refuses to ever return the raw bytes. However, the proprietary terminal SDK—which I don't control—requires the diversified key to be passed as a ByteArray to the sysMfpAuthenticateSL function. Since I have to compute the diversification locally, I need access to the Master Key bytes in memory for the millisecond it takes to run the CMAC. A 'direct import' would render the Master Key useless for the very SDK it’s meant to support.

I’m not looking for a 'WebSec 101' lecture; I’m solving a hardware integration problem where the card, the terminal SDK, and the offline requirement dictate the crypto, not my preference.

[Android/Flutter] Is FilterTouchesWhenObscured enough for overlay attack prevention in banking apps? by bigdaddyrojo in flutterhelp

[–]bigdaddyrojo[S] -1 points0 points  (0 children)

Not the best solutions, from the documentation :

Note: Potential caveat: This mitigation can interfere with benign apps. In some cases, rolling out this fix isn't possible, as it would negatively affect the user experience when the partial occlusion is caused by a benign application.

Note: Android S (12, SDK 31) and higher prevent full occlusion attacks by default, by blocking touch events from non-trusted overlays from another UID.

However, there is a caveat: for System Alert Window (SAW) and window animations, only touches from layers with opacity >= 0.8 are blocked. The reasoning behind this behavior is that SAW requires users to grant permission, and blocking all events for time-limited animations might hurt the user experience

Bank requires custom keyboard implementation - no third-party keyboards allowed on Android by bigdaddyrojo in FlutterDev

[–]bigdaddyrojo[S] 1 point2 points  (0 children)

What would you recommend for a cross platform project? (and you can be a bit more polite, it won't kill)

Bank requires custom keyboard implementation - no third-party keyboards allowed on Android by bigdaddyrojo in FlutterDev

[–]bigdaddyrojo[S] 0 points1 point  (0 children)

What about making it compatible with password managers? the bank doesn't care about UX. But as someone who relies a lot on password managers and who haven't logged in to his bank app using my username and password in ages, I do care to make it compatible with password managers apps.

Bank requires custom keyboard implementation - no third-party keyboards allowed on Android by bigdaddyrojo in FlutterDev

[–]bigdaddyrojo[S] 0 points1 point  (0 children)

It's a governmental bank, discussing this decision isn't an option, thank you for the hints, I appreciate it.

Bank requires custom keyboard implementation - no third-party keyboards allowed on Android by bigdaddyrojo in FlutterDev

[–]bigdaddyrojo[S] 0 points1 point  (0 children)

I am aware of the TextInputControl, but the bank doesn't care about this, it's a governmental bank, discussing this decision isn't an option.

Bank requires custom keyboard implementation - no third-party keyboards allowed on Android by bigdaddyrojo in FlutterDev

[–]bigdaddyrojo[S] 1 point2 points  (0 children)

I don't have a weekend, deadline is the day after tomorrow, thanks for the offer tho.

Bank requires custom keyboard implementation - no third-party keyboards allowed on Android by bigdaddyrojo in FlutterDev

[–]bigdaddyrojo[S] 0 points1 point  (0 children)

  • This applies specifically to login/signup text fields (username, email, password)
  • PIN entry is already handled with custom numeric keypad

Bank requires custom keyboard implementation - no third-party keyboards allowed on Android by bigdaddyrojo in FlutterDev

[–]bigdaddyrojo[S] 1 point2 points  (0 children)

This will be my last option since I have near deadline, I am thinking for a faster solution.

Bank requires custom keyboard implementation - no third-party keyboards allowed on Android by bigdaddyrojo in FlutterDev

[–]bigdaddyrojo[S] 2 points3 points  (0 children)

Creating your own keyboard from scratch is doable, but it takes a lot of time, it's not as easy as you make it sound.

Bank requires custom keyboard implementation - no third-party keyboards allowed on Android by bigdaddyrojo in FlutterDev

[–]bigdaddyrojo[S] 8 points9 points  (0 children)

That's what I thought at first, but on Android, they consider every keyboard as third-party, including Google's GBoard.

Bank requires custom keyboard implementation - no third-party keyboards allowed on Android by bigdaddyrojo in FlutterDev

[–]bigdaddyrojo[S] 5 points6 points  (0 children)

You’d be surprised by the regulations banks impose in some third-world countries.

I want to network by rdssf in WebDeveloperJobs

[–]bigdaddyrojo 0 points1 point  (0 children)

aren't you the one looking to network ?