pairsonic

Helping groups securely exchange contact information.

https://github.com/seemoo-lab/pairsonic

Science Score: 49.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 6 DOI reference(s) in README
  • Academic publication links
  • Committers with academic emails
    1 of 1 committers (100.0%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.0%) to scientific vocabulary

Keywords

acoustic-communication android authentication dart data-over-sound decentralized end-to-end-encryption flutter human-computer-interaction nearby proximity security serverless smartphone ultrasound usability
Last synced: 6 months ago · JSON representation

Repository

Helping groups securely exchange contact information.

Basic Info
  • Host: GitHub
  • Owner: seemoo-lab
  • License: apache-2.0
  • Language: Dart
  • Default Branch: main
  • Homepage: https://fputz.net/pairsonic
  • Size: 10 MB
Statistics
  • Stars: 54
  • Watchers: 5
  • Forks: 6
  • Open Issues: 0
  • Releases: 0
Topics
acoustic-communication android authentication dart data-over-sound decentralized end-to-end-encryption flutter human-computer-interaction nearby proximity security serverless smartphone ultrasound usability
Created over 1 year ago · Last pushed 12 months ago
Metadata Files
Readme License Citation

README.md

PairSonic

PairSonic is an open-source smartphone app that enables two or more users meeting in person to spontaneously exchange or verify their contact information. PairSonic supports the secure exchange of cryptographic public keys, which is crucial for protecting end-to-end encrypted communication, e.g., in messenger apps (so called authentication ceremony).

PairSonic simplifies the pairing process by automating the tedious verification tasks of previous methods through an acoustic out-of-band channel using smartphones' built-in hardware. It does not rely on external key management infrastructure, prior associations, or shared secrets.

Demo Video

Click on the gif below to open the full demo where you can hear what it sounds like:

Using PairSonic

This repository contains a demo implementation of the PairSonic contact exchange protocol. The app is written in Flutter and targets Android devices. Try it out yourself by following the build instructions below and installing the app.

When you start the app, you can create a profile (name, avatar, bio) and exchange it with nearby users (see live demo). The app itself doesn't have any functionality besides implementing the contact exchange, so you cannot do much with your newly exchanged contacts – except appreciating that your smartphone just sounded like R2D2, of course. And that this sound helped exchange your contact information via local ad-hoc communication, without relying on the Internet.

In the future, PairSonic could be integrated into other apps as an option for in-person contact exchange/verification.

Features

  • Verify end-to-end encryption. Securely exchanges cryptographic public keys.
  • Decentralized. Operates without needing external key management infrastructure, prior associations, or shared secrets. Does not require an Internet connection.
  • User-friendly. Automates verification tasks, making the process simpler and more secure.
  • Group compatibility. Designed to work efficiently with both individual users and larger groups.
  • Customizable profiles. Developers can customize the type of contact information exchanged.
  • Broad compatibility. Supports most Android devices with WiFi Direct, as long as they run Android 6 or newer (~2015).

Build & Develop

Requirements: - Flutter 3.22 - Java 17

In order to build & run the app, make sure to have Android Studio as well as adb installed and set up. For Android Studio, the Flutter and Dart plugins are recommended. Then, either run flutter run or click the play button next to the main function in lib/main.dart in Android Studio and choose "Run main.dart".

Project structure & documentation

The doc/ directory contains more documentation, such as a description of the code structure and an overview of the state machine used during the PairSonic exchange.

Localization (l10n)

Localization strings are placed inside the l10n directory in language-specific .arb files. The Android Studio plugin Flutter Intl automatically compiles these files into Dart code and outputs it into the generated/intl directory.

To manually generate these Dart files, run flutter pub global run intl_utils:generate in the project root.

Powered by

The PairSonic protocol is based on the secure foundation of the excellent SafeSlinger protocol. PairSonic internally uses the ggwave library for acoustic communication.

Authors

  • Florentin Putz (email, web)
  • Thomas Völkl
  • Maximilian Gehring

References

  • Florentin Putz, Steffen Haesler, and Matthias Hollick. Sounds Good? Fast and Secure Contact Exchange in Groups. Proc. ACM Hum.-Comput. Interact. 8, CSCW2, 2024. https://doi.org/10.1145/3686964 [PDF]
  • Florentin Putz, Steffen Haesler, Thomas Völkl, Maximilian Gehring, Nils Rollshausen, and Matthias Hollick. PairSonic: Helping Groups Securely Exchange Contact Information. Companion of the 2024 Computer-Supported Cooperative Work and Social Computing (CSCW Companion ’24), 2024. https://doi.org/10.1145/3678884.3681818 [PDF]
  • Project Overview

License

PairSonic is released under the Apache-2.0 license.

Owner

  • Name: Secure Mobile Networking Lab
  • Login: seemoo-lab
  • Kind: organization
  • Location: Darmstadt, Germany

GitHub Events

Total
  • Watch event: 30
  • Push event: 2
  • Fork event: 7
Last Year
  • Watch event: 30
  • Push event: 2
  • Fork event: 7

Committers

Last synced: over 1 year ago

All Time
  • Total Commits: 3
  • Total Committers: 1
  • Avg Commits per committer: 3.0
  • Development Distribution Score (DDS): 0.0
Past Year
  • Commits: 3
  • Committers: 1
  • Avg Commits per committer: 3.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Florentin Putz f****z@s****e 3
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: over 1 year ago

All Time
  • Total issues: 0
  • Total pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Total issue authors: 0
  • Total pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels

Dependencies

android/app/build.gradle maven
  • androidx.work:work-runtime-ktx 2.8.0-alpha03 implementation
  • com.android.support:multidex 2.0.1 implementation
  • com.google.android.material:material 1.12.0 implementation
  • org.jetbrains.kotlin:kotlin-stdlib-jdk7 $kotlin_version implementation
android/build.gradle maven
pubspec.lock pub
  • 159 dependencies
pubspec.yaml pub
  • build_runner ^2.1.11 development
  • flutter_lints ^3.0.1 development
  • flutter_test --- !ruby/hash:ActiveSupport::HashWithIndifferentAccess sdk: flutter development
  • json_serializable ^6.2.0 development
  • test any development
  • adaptive_dialog ^2.0.0
  • convert ^3.1.1
  • cupertino_icons ^1.0.5
  • device_info_plus ^9.0.0
  • flutter --- !ruby/hash:ActiveSupport::HashWithIndifferentAccess sdk: flutter
  • flutter_localizations --- !ruby/hash:ActiveSupport::HashWithIndifferentAccess sdk: flutter
  • flutter_secure_storage ^8.1.0
  • flutter_sound ^9.2.13
  • flutter_spinkit ^5.1.0
  • flutter_svg ^2.0.10
  • fluttertoast ^8.1.1
  • get_it ^7.2.0
  • ggwave_flutter --- !ruby/hash:ActiveSupport::HashWithIndifferentAccess git: !ruby/hash:ActiveSupport::HashWithIndifferentAccess url: https://github.com/fput/ggwave_flutter.git ref: cdf3736fe3b38959350e3a452a07f0cf6f375a8b
  • intl ^0.19.0
  • logger ^1.4.0
  • messagepack ^0.2.1
  • path ^1.8.3
  • path_provider ^2.0.15
  • permission_handler ^11.1.0
  • pointycastle ^3.6.0
  • sembast ^3.1.1+1
  • shared_preferences ^2.0.15
  • sodium_libs ^1.2.3
  • sqflite ^2.0.2+1
  • syncfusion_flutter_sliders ^24.1.41
  • volume_control ^0.1.5