OpenWifiPass – Open-Source Implementation of Apple's Wi-Fi Password Sharing
github.com
github.com
If Apple isn't using that, then it's them who are ignoring the standards and doing their own thing.
On iPhone if you and a friend in iMessage are together and one can connect to a protected WiFi, the other can connect to. Automatically.
Scenario: people come to my home, I give the password to a friend of mine that never visited me before or changed phone and asks me for the password. I don't know the other people and they don't ask for the password, but they get on the network anyway? Principle of most surprise and least security.
The idea that more sophisticated authentication is possible to prevent password sharing would be a surprise to most laypeople I know.
Also home internet is increasingly coming with smart routers that will alert you to new devices on the network. Tech savvy people are the only ones who BYOD.
Then they should switch their network to a more complex authentication scheme. Multiple SSIDs, run 802.1x authentication (maybe with certs), MAC filtering maybe (bypassable sure, but will foil most casual users), run their own simple portal and shunt different classes onto different VLANs with different levels of isolation and traffic shaping, etc.
Ultimately if there is one password which then gets any device on, well that's that. Sharing has always been pretty trivial. If the owner of a network wants more fine grained and powerful security, all the tools exist to do that already, but they'll have to use them.
That's what you get when all the decisions are made by a comitee that only cares about the BOM cost in the modems.
btw, nothing on this have changed. Only that the not-so-secure stuff is still relatively new and not exploited yet.
all hail wpa3, the new crapy unsafe standard of tomorrow.
or betting their life on WPA3 that haven't had a decent sized deployment yet?
Or did they bet their lives on WPA2-PSK/WPA2-enterp during the first months of launch before any exploit was public?
:)
As for the iMessage thing, holy shit that is such a bad idea and I'm really glad I never gave any iPhone users access to my network!
I don't think this is accurate. The Wifi sharing feature works differently. It's documented here: https://support.apple.com/en-us/HT209368
$ qrencode "WIFI:T:WPA;S:${SSID};P:${PASSWORD};;" -o wifi.pngWPS was kinda close, but you needed to set up the router (most home users won't figure this out), and actually press a button on it to invite a user.
Apple's protocol is super user friendly, when someone tries to connect to my wifi at home, I get a popup offering to share my wifi password.
I'm glad this sort of protocol is being reverse engineered and FLOSS alternatives pop up, since it'll allow better interaction with Linux desktop and iOS guests.
The PIN was implemented first because it’s the most convenient and doesn’t need hardware and it turned out to be a security disaster.
So now its reputation is shot and for both PIN and the button there had to be a way to turn off WPS (with the ‘secure’ default option being WPS off)
But the Apple sharing is something else entirely.
Why not just have an open WiFi network? I stubbornly have kept my network open since my very first Linksys WRT54G router. Am I some kind of internet hippy for feeling like networks should be open and we'd all be better off if we shared with our neighbors? Over the years, I've probably wasted an hours of my life searching for and struggling to correctly enter complex WiFi passwords.
Although truth be told, I think it's primarily that I don't want to bothered giving WiFi passwords to my guests:)
Because I don't want the creepy neighbor kid to do something on my guest network that will get me a visit from the cops or a letter from my ISP. Sure, guests could do that, but they'd be a lot less anonymous in the process.
Think about it. Honestly, what are the odds of that? I'm sure the last time I got in my car (to get a coffee) it was 100x more risky than that (actually it was snowing, make it 1000x). And so what? They show up, I'd tell pull open their phones and connect to my network. I did nothing wrong, have at it wasting my tax dollars. After all is said and done in that 1-in-a-million incident, still less of my life wasted with than if I bothered with annoying WiFi passwords over these decades.
Your comment reminds me of my friends and family who keep their kids locked up (pre-COVID), depriving them of the opportunity to learn independence that I had growing up. Just like when I was a kid, there is no crime in my neighbor and yet people act like their kid will have a 10% chance of being kidnapped if they let him go to the local convenience store, when in reality the odds are closer to 1 in 100 million. Social media or local news has screwed up our society's ability to calculate risk/rewards.
Here in Canada, I'm comfortable knowing the cops won't show up in military surplus and shoot me before I can explain.
I used to do that for a long time. It was great for guests and also for plausible denaiblity if I every got a nastygram from my ISP.
But the liability just got to great and the plausible deniability argument got pretty weak. And also, with so many neighbors with devices that will just auto join open networks, I started seeing strange traffic a lot, most likely from neighbors connecting accidentally.
At the end of the day, making it super easy for guests inside my house without being totally open works out well.
https://github.com/seemoo-lab/openwifipass/blob/main/OPACK.m...
Now if it could work on non apple devices (like when pressing the button on your router) I'd certainly code something with it too!
Usecase: you are at your desk with a new laptop (or a friend), the router is in the other room and the password is long, and you can't find where you put the QR code the last time.
On linux, it could get the active wifi network from iwconfig and the password currently used from either wpa agent, seahorse or others.
It should present the password in a window, in case it contains an identifier.
But it also works with people in your contacts if you are already connected to a network (let's say your home network) and a friend is trying to connect to that same network.
Every time I use it I love it.
My Android allows to share the password with a QR code, which is certainly not as ergonomic... in fact it's slower than spelling it out, even to 1 friend.
Wi-Fi passwords aren't really that secure a thing these days, anyways. If you need your Wi-Fi to be secure, you need to be doing RADIUS authentication or similar.
It's just from a UI standpoint that it's very seamless. You don't have to see the password, you don't have to enter it anywhere, one device just shares the Wi-Fi password with another device nearby.
Your key is too simple if it's easier to spell out. :)
Seems eminently sensible, no dependency on WiFi or Bluetooth stacks and works cross-platform.
A QR also lets you force the recipient onto a guest SSID instead of your LAN
Presumably Apple doesn’t support this QR method?
QR of course requires a screen and a camera, whereas Bluetooth can work on, for example, an Apple TV type device, or a smart speaker.
EDIT: So then the trick is being able to generate the QR code easily and securely (without having to send your WiFi password to the cloud). Presumably free apps exist to do this.
The key is probably stored in some hex format (I think wpa_supplicant in Linux also supports this format) but it's not hashing per-se as it's reversible.
> you can then go on your Mac and access the password in the list of saved wifi password
Not true.
Both of them end up displaying the raw password on the detail view now, though I do indeed remember that a year ago I saw some wireless passwords being in hex instead.
I'm not denying they might be reversibly-encrypted (although this doesn't happen to me anymore for some reason), but in any case for a WPA(2)-PSK network the key cannot be hashed using a one-way irreversible hash because it is needed as-is to actually complete the authentication. What you're seeing is encryption and not hashing.
Using a shared symmetric ChaCha20 w/ Poly1305 key to encrypt and authenticate the client's sign-on Curve255 exchange, you'd get a variety of usage modes for free without adding any special cases to the access point's side of the protocol.
The basic use case is that your device knows the password, so it listens for the periodic SSID announcement with the signed short-term DH public key. Your device then performs its side of the DH key agreement, and encrypts-and-MACs the public value with the password-derived key. The access point decrypts your public DH value, completes key agreement, and uses the agreed key to encrypt your short session ID, its expiry time, and a 256-bit ChaCha20/Poly1305 key[0] for the session, and send it back to your device.
In the case of temporarily granting access to a guest, the guest's device would generate a public DH value and send it to you. You'd then encrypt-and-MAC that exchange message and send it back to your friend's device. The friend's device would then be able to forward the DH exchange to the access point and sign on once. They'd have a session ID and encryption key that's valid until expiry.
In the case of a coffee shop granting temporary access to a paying customer, the phone could put its ephemeral public DH value in a QR code, and the cash register could scan the QR code, encrypt-and-MAC the public DH parameter, and directly send the value to the access point, at which point the customer's device could sniff and decrypt the sign-on message to learn its session ID and session key.
Each device gets its own session ID and session key, so they can't eavesdrop on each other.
If Curve22519 ends up getting broken, an attacker would still need to break ChaCha20 or learn the password in order to grab session keys. The client-side DH parameter still holds 252 bits of entropy (Curve25519's cofactor is 8, so the generator generates a 2*252 subgroup), and computing an Elliptic curve logarithm on this value still requires first decrypting the ChaCha20-encrypted sign-on message.
You wouldn't get perfect forward secrecy, but you would get forward secrecy through the timed key rotation of both the short-term DH keys and rotation of any symmetric keys used to avoid storing any per-session state in the access point.
[0] The session encryption key wouldn't simply be the DH-agreed key in order to allow the access point to avoid keeping per-session state and instead derive session keys from session IDs using periodically rotating symmetric encryption keys known only to it. The access point would need to guard against session IDs rolling over faster than they expired (and expiry would need to coincide with key rotation), but it's a simple check.
See hostapd psk files:
https://w1.fi/cgit/hostap/commit/?id=ec5c39a5574d4fbee983ae6...
It took me zero effort to set up and I can add my mom to my network in about 2 minutes. Even if I use Linux... chances are nobody coming over to my place is going to benefit from this.
Not panning it, and maybe it'll work with Android eventually. But as it is I can't see bothering with this.