13 KiB
Beta Test Plan
Core Functionalities
Action Plan review:
In our previous Action Plan, we listed the following functionnal specifications:
- Phone call encryption between two known pairs, that exchanged keys in person. Mandatory
- Phone dialer that is discret and functional, and should not disturb a normal use (clear phone call). Mandatory
- Phone call encryption between two unknown pairs, with key exchange on the go. Optional.
- SMS encryption between two known pairs (in person key exchange). Optional.
We now retain only the two first functional specifications.
Core Functionalities
Based on this review, here are all the core functionnalities we set:
Icing protocol
- Advanced protocol documentation, paving the way for a full RFC.
The protocol definition will include as completed:
- Peer ping
- Ephemeral key gestion
- Perfect Forward Secrecy
- Handshakes
- Real-time data-stream encryption (and decryption)
- Encrypted stream compression
- Transmission over audio stream
- Minimal error correction in audio-based transmission
- Error handling and user prevention
And should include prototype or scratches functionalities, among which:
- Embedded silent data transmission (silently transmit light data during an encrypted phone call)
- On-the-fly key exchange (does not require prior key exchange, sacrifying some security)
- Strong error correction
The Icing dialer (based on Icing kotlin library, an Icing protocol implementation)
The Icing dialer should be a fully transparent and almost undistinguishable smartphone dialer. Any Icing-unaware user should be able to use the dialer smoothly to make calls to anyone. The dialer should propose a full set of functionnalities to handle its Icing protocol implementation.
Here is the list of all the functionnalities our dialer will integrate:
-
Call
- Ringtone on incoming call
- Incoming and ongoing call notification
- Complete dialer with all numbers, star *, pound #
- Mute button
- Speaker button
- Normal call
- DTMF transmission
- SIM choice on call
-
Encrypted Call
- Encrypted call if pair public key is known
- Encrypted DTMF transmission
- Data rate indicator
- Data error indicator
- Disable encryption button
-
Call history
- Call details (timedate, duration, ring number)
- Missed calls filter
- Outgoing calls filter
- Incoming calls filter
- Call back function
- Contact modal on history tap
- Block call number
-
Contacts
- Sorted contact listing
- Contact creation / editing buttons
- Contact sharing via QR code / VCF
- Contact search bar (application wide)
- Favorite contacts
- Contact preview (picture, number, public key...)
-
Visual voicemail
- Play / Pause
- Notification
- Quick link to call, text, block, share number...
-
Miscellanous
- Settings menu
- Version number
- Storage of user public keys
- Blocklist gestion (list / add / del / search)
- Default SIM choice
-
Asymetric Keys
- Secure storage
- Generation at startup if missing
- Full key management (list / add / del / search / share)
- Secure generation (Android Keystore generation)
- Insecure generation (RAM generation)
- Exportation on creation (implies insecure generation)
- Importation
- Trust shift (shift trust from contacts)
Beta Testing Scenarios
- Clear call from Icing dialer to another dialer (Google, Apple...)
- Clear call from Icing dialer to another Icing dialer
- Clear call from Icing dialer to an icing pubkey-known contact but without Icing dialer
- Encrypted call from Icing dialer to a known contact with Icing dialer
- Encrypted call from Icing dialer to an unknown contact with Icing dialer
- Create / Edit / Save contact with(out) public key
- Share contact as QR code / Vcard
- Import contact from QR code / Vcard
- Listen to voicemail
- Record encrypted call and check the encryption
- Change default SIM
User Journeys
Mathilda, 34 years-old, connects to her PayPal account from a new device. To authenticate herself, PayPal sends her a code on her voicemail. Mathilda being aware of the risks of this technology, she has set up strong Icing authentication with her network provider by registering a pair of her Icing public keys. When she calls her voicemail, Icing protocol is triggered and checks for her key authentication ; it will fail if the caller does not pocesses the required Icing keys. Mathilda is thus the only one granted access, and she can retreive her PayPal code securely.
Jeff, 70 years-old, calls his bank after he had a problem on his bank app. The remote bank advisor asks him to authenticate, making him type his password on the phone dialer. By using the Icing protocol, not only would Jeff and the bank be assured that the informations are transmitted safely, but also that the call is coming from Jeff's phone and not an impersonator.
Elise is a 42 years-old extreme reporter. After interviewing Ukrainian opposition's leader, the SBU (ex KGB) are looking for her accross the whole country. She hides in western moutains near Romania, and she barely receive cellular network. She suspects her phone line to be monitored, so the best she can do to call for extraction safely, is to use her Icing dialer.
Paul, a 22 years-old developer working for a big company, decides to go to China for vacations. But everything goes wrong! The company's product he works on, is failling in the middle of the day and no one is qualified to fix it. Paul doesn't have WiFi and his phone plan only covers voice calls in China. With Icing dialer, he can call his collegues and help fix the problem, safe from potential Chinese spies.
Evaluation Criteria
Protocol and lib
- Security
- Encryption Strength: Ensure that the encryption algorithms used (e.g. AES-256, RSA, ECC) are up-to-date and secure.
- Key Management: Evaluate the mechanism for generating, distributing, and storing encryption keys (e.g., public-key cryptography, Diffie-Hellman, or ECDH).
- Forward Secrecy: Confirm that the protocol supports forward secrecy, meaning that session keys are discarded after use to prevent future decryption of past communication.
- End-to-End Encryption Integrity: Verify that no plaintext data is exposed outside the encryption boundary (client-side only).
- Zero Knowledge: The protocol and library should implement zero-knowledge principles, ensuring that the server cannot access or decrypt the communications.
- Authentication and Authorization: Evaluate the authentication method (e.g., multi-factor authentication) and ensure that only authorized users can initiate calls.
- Replay Protection: Ensure that mechanisms are in place to prevent replay attacks (e.g., using nonces or timestamps).
- Performance
- Latency: Measure the round-trip time (RTT) for call setup and audio quality during the call. A good system should aim for low latency to ensure real-time communication.
- Bandwidth Efficiency: Evaluate the protocol’s ability to minimize bandwidth usage while maintaining acceptable audio quality.
- Scalability: Ensure that the protocol can handle varying user numbers and call volumes without degradation in performance.
- Audio Quality (Codec Selection): Assess the choice of audio codecs (e.g., Opus, G.711) for their impact on call quality at different network conditions.
- Usability
- Ease of Integration: Evaluate how easy it is to integrate the library into an Android application, including the availability of well-documented APIs and clear examples.
- Cross-platform Compatibility: Ensure that the protocol supports multiple platforms (e.g., Android, iOS, desktop) to allow seamless communication between devices.
- Seamless User Experience: Check for smooth call initiation, handling of dropped calls, and reconnection strategies. The app should handle background operation gracefully.
- UI/UX Design: Assess the user interface (UI) of the Android dialer for intuitiveness, accessibility, and design consistency.
- Error Handling and Recovery: Evaluate how the system handles unexpected errors (e.g., network issues, connection drops) and recovers from them.
- Interoperability
- Support for Multiple Protocols: Verify if the library and protocol can integrate with existing standards (e.g., SIP, WebRTC) for interoperability with other services.
- Cross-device Compatibility: Ensure that calls can be initiated and received across different devices, operating systems, and network conditions.
- Backward Compatibility: Test whether the library is backward compatible with older versions of protocols or legacy systems where applicable.
- Privacy
- Data Storage: Evaluate how the system stores any data (e.g., user details, call logs). Ensure that sensitive information is encrypted both in transit and at rest.
- Data Minimization: Ensure that only the minimum necessary data is collected for the protocol to function.
- No Call Metadata Storage: Ensure that no metadata (e.g., call logs, duration, timestamps) is stored unless necessary, and, if stored, it should be encrypted.
- Compliance and Standards
- Regulatory Compliance: Ensure that the protocol adheres to privacy and security regulations, such as GDPR, HIPAA (if relevant), and other region-specific laws.
- Open Standards: Verify whether the protocol adheres to recognized open standards for secure voice communications (e.g., ZRTP, DTLS).
- Reliability
- Connection Stability: Test the stability of the connection during real-world use cases (e.g., fluctuating network conditions, roaming, mobile data).
- Error Logging and Monitoring: Assess the logging system to track errors, anomalies, or potential security threats. The system should have proper monitoring to help with diagnosing issues.
- Redundancy and Failover: Ensure that the system can handle server failures or network issues gracefully with proper redundancy mechanisms in place.
- Maintainability
- Code Quality: Review the library for clarity, readability, and maintainability of the code. It should be modular and well-documented.
- Documentation: Ensure that the protocol and library come with thorough documentation, including how-to guides, API references, and troubleshooting resources.
- Active Development and Community: Check the active development of the protocol and library (e.g., open-source contributions, GitHub repository activity).
Dialer
- User Interface
- Design and Layout: Ensure that the dialer interface is simple, intuitive, and easy to navigate. Buttons should be appropriately sized, and layout should prioritize accessibility.
- Dialer Search and History: Ensure there’s an efficient contact search, history logging, and favorites integration.
- Visual Feedback: Verify that the app provides visual feedback for actions such as dialling, incoming calls, and call termination.
- Call Management
- Call Initiation: Test the ease of initiating a call from contacts, recent call logs, or direct number input.
- Incoming Call Handling: Verify the visual and audio prompts when receiving calls, including notifications for missed calls.
- Call Hold/Transfer/Forward: Ensure the dialer supports call hold, transfer, and forwarding features.
- Audio Controls: Check whether the app allows users to adjust speaker volume, mute, and switch between earpiece/speakerphone.
- Call Waiting: Verify that call waiting functionality works, allowing users to switch between active calls.
- Call Recording: If supported, check whether the call recording feature works in compliance with privacy regulations and user consent.
- Integration with System Features
- Permissions: Ensure the app requests and manages necessary permissions (e.g., microphone, camera for video calls).
- Integration with Contacts: Ensure that the app seamlessly integrates with the Android contacts and syncs correctly with the address book.
- Bluetooth Support: Test whether the app supports Bluetooth devices such as headsets and car kits.
- Notifications: Ensure that call notifications work even when the app is in the background or the phone is locked.
- Battery and Resource Management
- Battery Usage: Evaluate the dialer app’s impact on battery life during active calls and idle periods.
- Resource Efficiency: Ensure the app doesn’t excessively consume CPU or memory while operating, especially during idle times.
- Security and Privacy
- App Encryption: Ensure that any stored data (e.g., contacts, call logs) is encrypted.
- Secure Call Handling: Verify that calls are handled securely through the encrypted voice protocol.
- Minimal Permissions: The app should ask for the least amount of permissions necessary to function (e.g., no unnecessary location or contacts access).
- Reliability
- Crash Resistance: Test for the app’s stability, ensuring it doesn't crash or freeze during use.
- Network Resilience: Test how the dialer handles varying network conditions (e.g., switching between Wi-Fi and mobile data).
- Reconnect and Retry Mechanisms: Ensure that the dialer can gracefully handle dropped calls and reconnect automatically.