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

Feat: introduce pairing support to protect against shoulder surfing #98

Merged
merged 77 commits into from
Jun 8, 2021

Conversation

ivard
Copy link
Member

@ivard ivard commented Jun 10, 2020

Security feature to enable the frontend and the IRMA app to explicitly bind with each other. When binding is enabled a session will not immedialy start when the QR is scanned. The user first has to confirm in the frontend that the QR was scanned with the right device.

Announcement

In two weeks from now we will release version 0.8.0 of irmago, including a new release of the irma CLI tool, as well as version 0.4.0 of irma-frontend. These versions introduces support for device pairing when starting an IRMA session by scanning a QR. In this way we prevent shoulder surfing attacks where someone in close physical proximity to the user scans a QR that was meant for the user.

When an IRMA app with pairing support is used and pairing is enabled, users are asked to explicitly enter a pairing code after they scanned an IRMA QR. The IRMA app will show a 4 digit pairing code and the user is instructed to enter this pairing code on the device where the QR was shown. When the pairing code is correctly entered on the other device, the user is referred back to the IRMA app where the session continues as usual. When the user's IRMA app has no support for pairing yet, the pairing stage is skipped (for now). Support for pairing is expected to land in the beta channel of the IRMA app in a few weeks.

This feature can be enabled by your frontend library. Our library irma-frontend version 0.4.0 and higher will automatically enable this feature in cases where pairing is recommended (e.g. during issuance). You can change the default setting if you want, although we do not recommend relaxing the strictness of the default setting. In mobile sessions (when you don't have to scan a QR), irma-frontend will never ask for a pairing code. If you implemented your own frontend library to handle your irma session, you can check here how to implement this yourself.

This new irmago version is fully backwards compatible with older versions of irma-frontend and irmajs, so there is no requirement to update your website right away. When using older frontend versions, the IRMA session will simply be performed without a pairing stage. For issuers we do recommend to update your website as well to make the issuance of your attributes safer.

Introducing pairing support forced us to make some changes in the public API of the irmaserver library and in the API of irma-frontend used by plugins. For an overview of what changed in irmago, you can check the CHANGELOG. The outline of the new API can be found here. For an overview of what changed in irma-frontend, see the release notes.

irmaclient/client.go Outdated Show resolved Hide resolved
irmaclient/handlers.go Outdated Show resolved Hide resolved
irmaclient/session.go Outdated Show resolved Hide resolved
irmaclient/session.go Outdated Show resolved Hide resolved
server/api.go Outdated Show resolved Hide resolved
irma/cmd/request.go Outdated Show resolved Hide resolved
irma/cmd/session.go Outdated Show resolved Hide resolved
internal/sessiontest/session_test.go Outdated Show resolved Hide resolved
irmaclient/session.go Outdated Show resolved Hide resolved
server/api.go Outdated Show resolved Hide resolved
internal/sessiontest/main_test.go Outdated Show resolved Hide resolved
messages.go Outdated Show resolved Hide resolved
messages.go Outdated Show resolved Hide resolved
server/irmaserver/api.go Show resolved Hide resolved
server/api.go Outdated Show resolved Hide resolved
internal/sessiontest/session_test.go Outdated Show resolved Hide resolved
internal/sessiontest/session_test.go Outdated Show resolved Hide resolved
irmaclient/session.go Outdated Show resolved Hide resolved
irma/cmd/session.go Outdated Show resolved Hide resolved
irma/cmd/session.go Outdated Show resolved Hide resolved
server/irmaserver/api.go Outdated Show resolved Hide resolved
server/irmaserver/api.go Outdated Show resolved Hide resolved
sietseringers
sietseringers previously approved these changes Oct 8, 2020
@ivard ivard changed the title Feat: introduce binding support to protect against shoulder surfing Feat: introduce pairing support to protect against shoulder surfing Nov 5, 2020
CHANGELOG.md Show resolved Hide resolved
ivard and others added 25 commits June 8, 2021 12:34
@sietseringers sietseringers merged commit a72a416 into master Jun 8, 2021
@sietseringers sietseringers deleted the shoulder-surf branch June 8, 2021 14:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants