Atlantis - User Guide Secure Messaging with OTP Ricardo Matsui Jonathan Vronsky Dan See Andrew Brandes Preface This document provides the details on design and implementation and an overview of setup and deployment of the Atlantis application and backend. The goal is provide a comprehensive guide for further development, troubleshooting, and deployment of the project for future developers. Audience The audience for this document includes future developers and project managers who need to have a complete view of the project. Vocabulary ● Application - The mobile secure messaging application installed on the end user devices built for Android ● Backend - The server hosted on the Heroku cloud which exchanges messages between different devices running the application. ● End-to-end Encryption - A form of communication where the backend server does not decrypt the messages being sent, and only the end-user devices can read the messages. ● OTP - A random block of data which is generated from a random source rather than from an algorithm such as a pseudo-random number generator ● OTP Encryption - The OTP computed for conversation is saved on the device after it is encrypted using AES with the user PIN. Even if the file of OTP is compromised the attacker would have to decipher the OTP. ● Entropy - Entropy is the amount of disorder in the data the application collects. The random data used by the app always follow the minimum entropy available to ensure as unpredictable data as possible. ● Harvester - The Harvester is a service that will run on the device in the background. The service will collect random data that will be used to produce the OTP. The service will run until the top cap of data the application can hold will be collected. ● Syncing - Syncing is how the application maintains a copy of a given OTP on a separate device for the purpose of decrypting enciphered messages send between them. To ensure data privacy, syncing must be done locally with USB or bluetooth. ● Notebook - A pair of one-time pads used for communication between two devices. It contains a sending and receiving one-time pad to establish two-way communication. ● Conversation - A conversation is the part of the application where a user can send messages to one or more previously synced contacts. ● Contact - A contact is another user who has synced OTPs with your system and with who you can exchange messages and initiate conversations with. ● Message - A message is a small note of text or an attachment, such as an image, you can send that is received by all other members of a conversation. Table of Contents Preface ...................................................................................................................................... 1 Audience ................................................................................................................................ 1 Vocabulary ............................................................................................................................. 1 Table of Contents ................................................................................................................... 2 Overview of Product ................................................................................................................... 4 Installation & Distribution............................................................................................................ 4 Backend ................................................................................................................................. 4 Development ....................................................................................................................... 4 Deployment......................................................................................................................... 5 Android Application................................................................................................................. 5 Development ....................................................................................................................... 5 Deployment......................................................................................................................... 5 Functionality ............................................................................................................................... 5 Lock Screen ........................................................................................................................... 5 Conversation List .................................................................................................................... 5 New Conversation Screen ...................................................................................................... 6 Notebooks Screen .................................................................................................................. 6 Notebook Screen .................................................................................................................... 6 Syncing Screen ...................................................................................................................... 6 Conversation Screen .............................................................................................................. 6 Message Screen .................................................................................................................... 7 Settings Screen ...................................................................................................................... 7 Harvester Service ................................................................................................................... 7 Backend Service .................................................................................................................... 7 Troubleshooting ......................................................................................................................... 7 Frequently Asked Questions ...................................................................................................... 8 Contact Information .................................................................................................................... 9 Index .......................................................................................................................................... 9 Appendix .................................................................................................................................... 9 Design Document ................................................................................................................... 9 Summary ............................................................................................................................ 9 Introduction - Why One Time Pads? ..................................................................................10 Background........................................................................................................................10 Design Goal .......................................................................................................................10 The Platforms ....................................................................................................................10 OTP Transfer Medium........................................................................................................11 Generation of OTPs ...........................................................................................................11 Local Device Storage .........................................................................................................11 Local Encryption ................................................................................................................12 User Interface ....................................................................................................................12 Server ................................................................................................................................16 A Graphic Explanation on How OTP Works: ......................................................................17 Caveats & Possible Solution: .............................................................................................18 Testing Document .................................................................................................................19 Summary of Product ..........................................................................................................19 Developer Contact Information...........................................................................................19 Resources Required for Testing.........................................................................................19 Packaging and Building......................................................................................................20 Process for Defect Reporting & Repair ..............................................................................20 Functional Testing Plan......................................................................................................21 Non-Functional Testing Plan ..............................................................................................21 Test Cases.........................................................................................................................21 Overview of Product With recent events, security and privacy have become major topics globally, and new revelations on mass surveillance and the ever-increasing power of computers have shown how existing Internet traffic encrypted with SSL and VPN can be problematic if the communication is recorded, since that communication may be decrypted as more powerful computers become available. The Atlantis project solves this by providing private, end-to-end encryption using the one-time pad technique which guarantees the message cannot be decrypted as long as the pad is not compromised. The app requires Atlantis users to start their conversation with an in-person meeting, allowing their devices to exchange a completely random pad outside of any network. This pad is then used to encrypt future messages for transfer across the Internet. Because the pad is random and is never reused, it is not possible to decrypt the messages without the pad, even with any amount of computational power. Atlantis therefore provides privacy-aware customers such as journalists and businesses, with a convenient platform for secure messaging. Installation & Distribution Backend The backend can be be downloaded using Git from: https://bitbucket.org/ecs-193-atlantis/otpserver Development The backend can be easily installed locally by downloading the necessary dependencies: ● MongoDB from http://www.mongodb.org/ ● Node.JS from https://nodejs.org/ ● Heroku Toolbet from https://toolbelt.heroku.com/ ● Install remaining dependencies by running `npm install` and `npm install nodemon` After installation, the server can be run locally by running `nodemon index.js` Deployment It is designed to be deployable using Heroku https://www.heroku.com. To deploy the server, create a new app on Heroku and add the following add-ons: ● MongoLab - MongoDB database provider ● New Relic APM - App performance monitoring Then following the instructions for uploading the code using Git on the Heroku App Deploy page. The backend will be uploaded and will auto-start on the domain provided by Heroku. Pushing new code will automatically restart the service. Android Application The Android application can be downloaded using Git from: https://bitbucket.org/ecs-193-atlantis/otp-android Development The only requirement for developing the Android application is Android Studio http://developer.android.com/sdk/index.html After opening downloaded the project, select Build and Run to compile and run the project. To configure the application to use a different backend, modify the string resource `backend_url` to the URL of the backend hosted on Heroku. Deployment The application can be packaged to an APK, signed, and distributed on the Play Store using the latest guides published on the Android developer platform: http://developer.android.com/tools/publishing/preparing.html Functionality Lock Screen The lock screen shows to enter a PIN to unlock the application. The first time a PIN is needed, the app will request the user to enter a PIN. The PIN is used to encrypt the local data of the application, including the one-time pads. This provides security from attackers with only limited access to the device. Conversation List The conversation list is the home page of the app and shows a list of the conversations that can be selected to view the conversation. It also provides the ability to create a new conversation using the new conversation button. The settings page can also be opened from this page. New Conversation Screen The new conversation screen can be opened from the conversation list. The contacts that this conversation will be with can be entered, with the application providing suggestions from the contacts on the phone when entering names. Multiple names can be entered to create a group conversation with multiple people. The notebook length can also be selected on this page to specify how large the one-time pads should be. The size slider allows a size based on the type of content will be used most. Conversations with images will require significantly larger one-time pads than text conversations. Submitting the new conversation will create the notebooks and go to the notebook screen. Notebooks Screen The notebooks screen is opened after creating a new conversation and can be accessed from any conversation screen. The notebooks screen is used to show the status of the notebooks of the contacts in the conversation. These notebooks are the pairs of one-time pads used to encrypt and decrypt the messages being sent. The amount left is shown, as well as if the notebook has been synced with the necessary contact. Selecting an unsynced notebook will go to the sync screen for that notebook, and selecting a synced notebook will go the notebook screen. Notebook Screen The notebook screen shows extra details about the notebook selected and allows for the notebook to the re-synced. Notebooks must be re-synced when they are empty or close to being empty because one-time pads cannot be re-used. When selecting to re-sync, a new notebook is created and the new notebook must be synced with the contact in-person via the syncing screen. Syncing Screen The syncing screen is used to show methods of syncing the notebook which contains the onetime pad. It shows the various methods of syncing, including via Bluetooth and USB. Each method has a description and instructions specific to perform the sync. The syncing method must be the same between the two devices being synced. The Bluetooth method requires two Bluetooth-enabled devices and USB requires an On-The-Go adapter. Once the method is selected, the one-time pads will be transferred between the devices, and the conversation can be used. Conversation Screen The conversation screen shows the message history in the conversation and send messages. The top bar shows the amount of the notebook that is still available to be used to send messages, and buttons to refresh and view the notebooks being used in the conversation. The bottom bar contains the text entry, send button, and attachment button. Pressing the attachment button shows an image picker to allow for sending messages. The message history list can be scrolled and selecting a message in the list will open the message screen. Message Screen The message screen shows the full contents of a message, including a large view of image messages so that the content can be easily seen and read. Pressing back will return to the conversation screen. Settings Screen The settings screen shows options such as selecting the image quality preference and adjusting the PIN code settings. The settings screen can be opened from the conversation list. The settings are saved as they are changed making it easy to use. Harvester Service The harvester service runs in the background collecting data from various sources, then extracting the randomness from them to create the one-time pads. The specific data in the sources is destroyed, but the entropy is calculated and extracted in the process. This generates cryptographically secure random bytes that are used during the conversation creation stage. The harvester sleeps after it collects a sufficient amount of data for a new conversation in order to conserve battery. Backend Service The backend exchanges messages by temporarily storing them and allowing the application to look the messages up via their unique addresses that are generated by the one-time pads. Since both participants have the one-time pad, they can query for each other’s messages via the backend service. The backend service connects to the applications via Socket.io, which provides a real-time connection, allowing messages to be quickly pushed and pulled from the service to the devices. Troubleshooting ● Messages cannot be sent Check the Internet connection of the device and check that the backend service is running and the application is configured to use the correct one if it has changed. ● USB device not found Check the manufacturer’s website if the device supports accessories and the USB OnThe-Go standard. Replace the USB cable if the devices are still not working. ● Messages do not load when debugging The application may not have requested a PIN due to the application lifecycle when debugging. Exiting the application and returning to it will cause the application to request a PIN to decrypt the messages. ● Database incompatible after updating schema during development The database must be given an upgrade path for the new schema for it to upgrade to the new version. Another solution is to clear the application data in phone settings to reset the application, but all data in the application will be lost. Frequently Asked Questions ● How is randomness generated? Randomness is generated from entropy sources that exist on the device. ● Why does making a new a conversation require having the participants in-person? Since the app uses one-time pad, the one-time pads must be exchanged outside of the network in order to provide security. ● What makes a good entropy source? The entropy sources which are most affected by thermal noise, which is considered random, are good candidates for entropy. They can also depend on the randomness present in the environment, and the Shannon entropy calculation can determine the level of entropy present. ● Why use one-time pad if regular encryption is considered secure? Encryption could be broken with stronger computing power, while one-time pad will always be unbreakable if the pads are not compromised due to a lack of an algorithm that related the ciphertext to the plaintext without the pad. ● Why does the app require the participants to re-sync the notebook? The one-time pad is used and never re-used, hence when all the data in the one-time pad is sent, the it will run out and the notebook must be re-synced to create new onetime pads. ● Does the location of the in-person syncing matter? Sometimes, when using Bluetooth it could because the Bluetooth data could be captured by someone using a Bluetooth receiver if the location was a public place. USB data on the other hand is significantly more difficult to be captured by someone because it is a wired connection, so the location is not as important. ● Is an Internet connection necessary? Yes, the messages are sent over the Internet and require connection to the backend server to send messages. ● How long does the one-time pad last? It depends on the nature of the messages sent and the frequency that they are being sent at. Images require significantly more OTP than text, and text only conversation can last for several days with one sync. Contact Information Name Email Andrew Brandes apbrandes@ucdavis.edu Ricardo Matsui rmmatsui@ucdavis.edu Dan See dcsee@ucdavis.edu Jonathan Vronsky jvronsky@ucdavis.edu Index Android, 1, 2, 5, 10, 19, 20, 22, 23, 24, 25, 26 Android Studio, 5, 19, 20 Application, 1 Backend, 1, 2, 3, 4, 7 Bitbucket, 20 Bluetooth, 6, 8, 10, 11, 19, 20, 22 Collision, 17 Contact, 2, 3, 9, 19 Conversation, 2, 3, 5, 6, 13, 21, 22, 24 encrypt, 4, 5, 6, 10, 12, 19, 26 end-to-end, 4, 10 Entropy, 1 entropy source, 8 Git, 4, 5, 19, 20 Harvester, 1, 3, 7 Heroku, 1, 4, 5, 20 Message, 2, 3, 7, 18, 19 Appendix Design Document Summary MongoDB, 4, 5, 19, 20 Node.JS, 4, 20 Notebook, 2, 6 notebooks, 6, 7 On-The-Go, 6, 7 OrmLite, 12 OTP, 1, 2, 3, 9, 10, 11, 12, 13, 17, 19, 21, 24, 25 PIN, 1, 5, 7, 8 Randomness, 8 Receiving, 17, 18 re-synced, 6, 8 schema, 8, 12 settings, 5, 7, 8, 13 sync methods, 23 Syncing, 2, 3, 6 Transmission, 17 USB, 2, 6, 7, 8, 19, 20, 22 This document provides background and details on the implementation of One Time Pads (OTPs) in a secure messaging application. The goal is to provide secure end-to-end messaging that is fairly convenient and guarantees that your data will remain private. Introduction - Why One Time Pads? In any secure environment, users need a way to transfer data securely over a network. The users cannot use the Internet because the public network cannot be trusted. They operate under the assumption that all the data they send over it can be intercepted and read, even if it is transmitted under SSL, VPN, or other encryption based on difficulty of solving certain algorithmic problems such as factoring. By using encryption, the users can secure any data, but it’s only as strong as the encryption used. If the traffic is captured, newer computers. OTPs tries to solve this by providing secure transfer that can’t be decrypted even if all of the data is intercepted. But for this to work, users need to transfer the OTPs over short range secure methods. Background A one-time pad is an encryption technique that can’t be cracked if used properly. It works by pairing plaintext with a random key (or pad). We combine each bit of the text with the corresponding bit of the pad with modular addition. Since the pattern is never reused, and the pad is truly random, it will be impossible to decrypt without the same pad. Design Goal Our goal is to create an application to guarantee the secure, end-to-end transmission of a message using the one time pad technique to encrypt the message and related server infrastructure to exchanges messages between devices running the app. We want to create this mobile application in addition to an accompanying server that fields the transmission and delivery of these messages. The application should show the users multiple recipients that they can send to, and allows an easy process for starting a new OTP exchange/conversation with another user. The OTP should be generated relatively quickly and have the encryption and decryption logic built in. The Platforms 1. Android: We choose to develop this system primarily for android, due to the high market volume and a very friendly development process. It is free to develop and to publish which helps keep costs to a minimum. 2. iPhone: We have plans to expand our working product to the iPhone is it is feasible. The downsides include a cost to develop and the fact that they only run Bluetooth Low Energy. We will also have to modify the android java code for use in Objective-C. OTP Transfer Medium 1. Bluetooth: Easiest way to transfer the OTPs between phones. It only requires you to be fairly close to the corresponding device, and no additional parts needed. We also implemented a system that error checks the data being sent and has a resend option. This will guarantee delivery even for larger file sizes. However, large OTPs (>10MB) can have long transfer times, which is undesirable. In terms of security, Bluetooth is much more secure than the network, but it is not perfect. Malicious users can gain access to the data with use of specialized equipment if they are nearby. 2. Cable: Another very easy way but requires the use of additional piece that needs to be obtained elsewhere. It requires physical interaction and something additional. You could either use a computer as an intermediary, a male to male AUX cable, or a female usb cable to connect the two phones directly. This takes away from the convenience factor but could be useful for exceptionally large OTPs because we could transfer them much faster. It makes for a good secondary transfer method. 3. SD Card: Very similar to the cable, as it requires a separate item. Potential to be very useful for large OTPs and makes it easy to transfer between people. The problem is that not all platforms (i.e.: iPhone) support SD cards. It requires more user knowledge and can be a bit of a hassle. Users would have to be able to install and remove SD cards from their individual phones. Generation of OTPs To generate the OTPs we started with the Secure Random function found in Java, and then upgraded to harvesting higher entropy sources using audio and other sources and extracting entropy. This function provides a way to generate a non-deterministic random value. This approach makes it nearly impossible to reproduce the seed and the output. We use this approach to generate an OTP that is a merely a file of random data. By encrypting the data being sent with this, character by character, we create a ciphertext that can’t be decrypted without the OTP. This OTP can also be used as an addressing system for the messages. Because we want to keep it anonymous without permanent addresses, we adapted our system to use a small part of the OTP for every message you send as an address. Because both users in a conversation have the OTP, the receiving device can “listen” at that address for messages on the server. While we could use a separate OTP for this operation, we decided that it would be most efficient if both pulled from the same OTP. To keep the OTPs safe on the phones, they will be encrypted into a database and retrieved only when the corresponding conversation is in use. Local Device Storage To store data on the device, we are planning on using an OrmLite SQL database. This allows us to store the applications data in a straightforward and logical way. We plan to make use of a schema as shown below. By following this, we can set up our data in an easy to access and manage way. In this way, we can link conversations to multiple OTPs which in turn will be linked to people. Each person can have multiple OTPs but a single OTP can only belong to a single person. Messages are simply a part of the conversation but also keep track of whether a message has been read and if it needs to notify the user. Schema Diagram Local Encryption In order to protect the users data on the phone, we plan to implement a pin lock system. We will use the pin to generate a random string that is used to encrypt the data and the checksum. When starts the app and enters in their pin, we will decrypt these values and compare the checksum to ensure that the decoding was done properly. This offers protection for the data on the phone for the user. We also want to give the user the option to delete data upon a number of failed pin attempts. User Interface Our main page will give the user a few choices: Existing Conversations, New Conversation, and settings. Existing conversations is merely the conversations that have already had OTP exchanges and are ready to send. The page will let the user know how much of the OTP remains and offer a simple chat UI. The new conversations panel will allow the user to start off a OTP exchange with options letting the user select the transfer medium. After syncing, this will be added as a new conversation. Settings will allow the user to edit things such as their pin. UI Design Mock-Up UI Design Examples Server Our server is going to field the retrieval and storage of the ciphered messages. When a user goes to send a secured message over the network, it will use a small piece of the OTP as an address. Using this address, it is stored in the server. The app will periodically check with the server on addresses it is expecting messages from because it has the same OTP as the sender so it knows what to addresses to look under. This keeps user identities anonymous so the server can’t reveal this information if compromised. 1. Transmission: the device that is transmitting will send the message to the first address decoded, and will start a timer. Then the transmitting device will wait for an "OK" message to arrive from the receiver on the same address. Once the "OK" has arrived the transmitter knows to disregard the first address and make address 2 into address 1 and generate new address for address 2. If the "OK" message does not arrive before timeout is declared the transmitter will resend the message. 2. Receiving: As for transmission the receiver also keeps track of two addresses. When the receiver sees a message on address1 it sends back an "OK" message. At this point the receiver keeps address one until it sees a new address coming in address2. Arrival of message in address2 indicates the "OK" was received. Then the receiver disregard address1, makes address2 address1 and creates a new address2. 3. Collision: In case two different conversation use the same address space the newer message will override the older one. The receiver will know if the address was meant for it by comparing the decoded message to the checksum. To avoid constant race condition we will introduce exponential back-off to help reduce the amount of overrides. A Graphic Explanation on How OTP Works: OTP Exchange Sending Secure Message Receiving Secure Message Caveats & Possible Solution: 1. A nice thing to have for messaging is push notifications. They would let the user know immediately when a message arrives for him/her. The problem with this is that our server doesn’t know who is receiving. We believe it is not feasible to implement a push notification system and instead just have our app check in with the server periodically with addresses it is expecting traffic on. To do this without requiring constant access, we feel a check that backs off is the best compromise. 2. Denial of service attacks could be very problematic for our application. An attacker could send non-stop messages to random addresses and by that constantly override everybody's messages. A proposed solution is to take addresses with high override rate 'out of service' till they clear up. By doing that we can minimize the damage done by the attacker. Testing Document Summary of Product Brief Primary Use Case of Product The primary use case is to provide secure and private communication between two devices by using the one-time pad encryption technique. This technique involves generating a random pads of data, exchanging them between two devices outside of the network by using USB, Bluetooth, etc., and then using the pads to encrypt messages between the devices and sent over the network via an anonymous relay server. In this way, users can create conversations and then send messages. Major Elements of Product 1. Android Application a. Storage i. Safety: Encrypt data ii. Integrity b. Off Network Communications i. Bluetooth ii. USB iii. AUX c. Message Encryption using OTP protocol d. Network Connection with the Server e. GUI 2. Server a. Distributing addresses b. Storing of messages Developer Contact Information ● Ricardo Matsui (rmmatsui@ucdavis.edu) ● Jonathan Vronsky (jvronsky@ucdavis.edu) ● Dan See (dcsee@ucdavis.edu) ● Andrew Brandes (apbrandes@ucdavis.edu) Resources Required for Testing Development Machine ● Capable of running Android Studio and Git for building Android application ● Capable of running Node.js, MongoDB, and Git for running server Android Application ● Two Android phones running Android 4.4 ● AUX Cable Connection ● Bluetooth Capability ● USB host capability ● USB On-the-Go Cable ● USB to Micro USB Cable Estimated Person Hours Approximately 1 hour and 30 minutes. How to Obtain Resources Hardware is widely available and can be purchase online at Amazon. Software is free and can be downloaded from the Git, Android, Node.js, and MongoDB websites or package managers for the development operating system. Packaging and Building Android Application 1. Application can be checked out with Git from the Bitbucket repo at https://bitbucket.org/ecs-193-atlantis/otp-android 2. Open Android Studio and open the Atlantis project 3. Select Build and Run Server 1. Server can be checked out with Git from the Bitbucket repo at https://bitbucket.org/ecs193-atlantis/otp-server 2. Install Node.JS from https://nodejs.org/ 3. Install Heroku Toolbet from https://toolbelt.heroku.com/ 4. Install dependencies by running `npm install` and `npm install nodemon` 5. Launch the server locally by running `nodemon index.js` 6. Configure the Android application by setting the remote URLs to use the IP address of the local server. Process for Defect Reporting & Repair Issues defects will be reported to the Bitbucket repo issue tracker, with proper title, reproduction steps, component identification, priority, and assigned to a developer. Within one day, the developer will accept the issue by responding to it or request more information by assigning back to the reporter. Once accepted, the developer will create a separate branch from the master branch to address the issue and develop the fix. Once the fix has been completed, the developer will create a pull request to master for code review including `Fixed #<issue number>` in the title. Once the pull request has been reviewed by at least one other developer and merged into master, the issue will be resolved, and the reporter of the issue can then close the issue or reopen if the problem continues. Functional Testing Plan Test ID User Identification User Goal Developer Estimated Time Tester Estimated Time #1 End-User Create Conversation 3 min. 3 min. #2 End-User Sync Conversation 10 min. 7 min. #3 End-User Send and Receive Messages 20 min. 9 min. #4 End-User See Warning on Low OTP 10 min. 8 min. #5 End-User Delete Conversation 8 min. 8 min. #6 Application Application Can Send and Query Messages on Server 7 min. 7 min. Non-Functional Testing Plan Test ID Category Sub-Category Specific Goal Developer Estimated Time Tester Estimated Time #6 Security Encryption Messages are Encrypted with OTP 15 min. 15 min. #7 Security Authenticity Messages are Checked for Authenticity 15 min. 18 min. #8 User Experience Performance Conversation Loads Quickly 5 min. 8 min. #9 User Experience Performance Messages Are Sent Quickly 5 min. 8 min. #10 Security Availability Server Is Reliable 9 min. 10 min. Test Cases Test Case Template 1. User Type 2. Goal 3. Initial Conditions / Required Resources / Configurations 4. Test Script a. User action b. Expected response c. User action d. Expected response e. … f. User action g. Expected response indicating completion 5. Functional test cases - Checking for correct completion or Non-functional test cases measuring degree of compliance 1. Create Conversation 1. End-user of application 2. To start a new conversation with another user 3. The two users are together with both Android devices that have the application installed 4. Test Script a. Both users launch the application b. The application launches to the conversation list c. Both users tap the new conversation button d. The application moves to the new conversation button e. Both users name the conversation with a title they like and choose a pad size f. The application configures the conversation with those parameters g. Both users select create h. The application creates the conversation and generates the pad size and completes this test by showing the sync page 5. The application reaches the sync page without any error and the OTPs are saved to each device’s memory. 2. Sync Conversation 1. End-user of application 2. To sync a conversation with another user 3. The two users are together with both Android devices that have the application installed and have a common method of syncing data (USB, Bluetooth, etc.). They have created a conversation in the previous step or already have made a conversation together. 4. Test Script a. Both users select sync or are at the sync screen b. The application shows them a list of supported sync methods on their device c. Both users tap the same sync method d. The application shows the instructions for the method they chose e. Both users follow the instructions to start the transfer of the pad which may include pairing the other device f. The application performs the transfer and shows progress as the transfer is made g. Both users can observe the progress of transfer of the pads h. The application completes the transfer and completes this test by taking both users to the conversation page 5. The application reaches the conversation page without any error and the OTPs are the same on both devices. 3. Send and Receive Messages 1. End-user of application 2. To send a message from User A to User B 3. The two users have both Android devices with Internet access and have the application installed with a conversation created and synced between the two devices 4. Test Script a. User A opens the application and selects the conversation with User B b. The application loads the conversation between User A and User B c. User A selects the message field, enters a message, and presses send. d. The application encrypts the messages and sends it to the server e. User A sees the message in the conversation on their device f. User B opens the application and selects the conversation with User B g. The application loads the conversation and requests new messages from the server. h. User B sees the conversation as it was previously rather than waiting for new messages i. The application receives the new message from the server, decrypts it, and adds it to the conversation j. User B sees the new message and it is the same as what User A entered k. The application completes this test by having sent and received the message correctly 5. The application was able to send and receive a message without any error and the message is received correctly on the devices. 4. Warning on Low OTP for Conversation 1. End-user of application 2. To show that a conversation should be refreshed 3. A user has an Android device and has been using a conversation for some time and the OTP available is below 20%. 4. Test Script a. The user opens the conversation b. The application shows them the conversation and a warning that the OTP is below 20% and that they should refresh it with the other user c. The user can tap the refresh button to begin the sync process d. The application completes this test by showing the sync process 5. The application completes the test by showing the warning message with the OTP available is below 20% 5. Delete Conversation 1. End-user of application 2. To delete an old conversation 3. A user has an Android device and no longer needs a conversation 4. Test Script a. The user opens the conversation b. The application shows them the conversation c. The user taps the delete option d. The application deletes the conversation and related OTPs from the device, completing the test 5. The application completes the test by removing the conversation, messages, and OTPs from the device memory 6. Messages are Encrypted With OTP 1. End-user of application 2. To show that messages are encrypted with OTP 3. An Android device with the application and with a conversation set up and synced. A network which can have the traffic captured. 4. Test Script a. The user opens the application and selects the conversation b. The application shows them the conversation c. The user enters a message and taps on send and repeats the same message again. d. The application encrypts the messages and sends them over the network e. The tester examines the messages sent over the network and verifies that it was sent encrypted and the tester verifies that the OTP is not reused in any way by seeing that the encrypted text has been shifted accordingly. This completes the test. 5. The test is completed by showing that the messages are encrypted with the OTP on the device and the OTP is not reused 7. Messages Are Checked for Authenticity 1. End-user of application 2. To show that messages are checked for modification on the network 3. Two Android devices with the application and with a conversation set up and synced. A network which can have the traffic modified. 4. Test Script a. User A opens the application and selects the conversation b. The application shows them the conversation c. User A enters a message and taps on send d. The application encrypts the messages and sends them over the network e. The tester modifies the message sent on the packet on the network f. User B opens the conversation g. The application requests new messages and does not validate the modified message h. User B does not see the modified message, completing the test 5. The test is completed by showing that the messages must be received correctly to be shown and cannot be tampered 8. Conversations Load Quickly 1. End-user of application 2. To show that the application performance is acceptable 3. An Android device with the application and with a conversation set up and synced and many messages sent. 4. Test Script a. User A opens the application and selects the conversation b. The application shows them the conversation without significant delay 5. The test is completed by measuring how quickly the application opens the conversation 9. Messages Are Sent Quickly 1. End-user of application 2. To show that the application performance is acceptable 3. An Android device with the application and with a conversation set up and synced and many messages sent. 4. Test Script a. The user opens the application and selects the conversation b. The application shows them the conversation c. The user sends a long message d. The application encrypts the message without significant delay, completing the test 5. The test is completed by measuring how quickly the application is able to encrypt the message and send it to the network 10. Server Is Reliable 1. Application API 2. To show that the server does not fail with high loads 3. A server instance and another computer on the network to stress-test 4. Test Script a. The tester runs a script to deliver many requests per second of messages and message queries to the server of various lengths and some valid and invalid b. The server processes and enqueues requests, but does not crash or consume more resources that it has c. The server completes the test if it does not crash 5. The test is completed by measuring how many requests per second can be processed successfully and how many resources it uses on the server. 11. Server Can Receive and Query For Messages 1. Application API 1. To show that the server can accept and respond to queries 2. A server instance and another computer on the network to send API requests 3. Test Script a. The tester send a message to the server at a message address to the API endpoint b. The server processes and stores the message c. The tester queries the server for messages at the message address via the API endpoint d. The server responds with the message the tester originally sent e. The tester queries the server for message at an address without messages f. The server responds without any messages g. The test is completed by showing the messages can be sent and received correctly 4. The test is completed showing that it can store and query for messages