From: Antonio Ospite Date: Mon, 4 Jan 2016 16:47:23 +0000 (+0100) Subject: Initial import X-Git-Url: https://git.ao2.it/SaveMySugar/savemysugar-website.git/commitdiff_plain/0f8a58d4cabfa9bdc48c8b639418582de5f5ebd9 Initial import --- 0f8a58d4cabfa9bdc48c8b639418582de5f5ebd9 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..35c6a07 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +css/ +*.css.map +.sass-cache/ +upload.sh diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..00421ac --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +DESTDIR := css + +SOURCES := $(wildcard [^_]*.scss) +COMPILED := $(SOURCES:.scss=.css) + +update: $(COMPILED) + +clean: + rm -rf $(DESTDIR) .sass-cache + +%.css: %.scss + [ -d $(DESTDIR) ] || mkdir -p $(DESTDIR) + scss --compass --unix-newlines -t expanded $< $(DESTDIR)/$@ diff --git a/README b/README new file mode 100644 index 0000000..3893f97 --- /dev/null +++ b/README @@ -0,0 +1,4 @@ +Dependencies: + compass-normalize-plugin + compass-susy-plugin + compass-breakpoint-plugin diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..5de39fa Binary files /dev/null and b/favicon.ico differ diff --git a/files/SaveMySugar-0.1-debug.apk b/files/SaveMySugar-0.1-debug.apk new file mode 100644 index 0000000..b3a1482 Binary files /dev/null and b/files/SaveMySugar-0.1-debug.apk differ diff --git a/images/CC_by-nc-sa_2.5_it_88x31.png b/images/CC_by-nc-sa_2.5_it_88x31.png new file mode 100644 index 0000000..30f8ea1 Binary files /dev/null and b/images/CC_by-nc-sa_2.5_it_88x31.png differ diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 0000000..7274579 Binary files /dev/null and b/images/logo.png differ diff --git a/images/savemysugar_plot_codex.png b/images/savemysugar_plot_codex.png new file mode 100644 index 0000000..7ddea85 Binary files /dev/null and b/images/savemysugar_plot_codex.png differ diff --git a/images/savemysugar_plot_savemysugar.png b/images/savemysugar_plot_savemysugar.png new file mode 100644 index 0000000..982fb6d Binary files /dev/null and b/images/savemysugar_plot_savemysugar.png differ diff --git a/images/symbols_distances.png b/images/symbols_distances.png new file mode 100644 index 0000000..87bfcf4 Binary files /dev/null and b/images/symbols_distances.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..a36c530 --- /dev/null +++ b/index.html @@ -0,0 +1,139 @@ + + + + + + + + + + + + + SMS: Save My Sugar + + + + + + + + +
+
+

What

+ +

SaveMySugar is an experiment about sending short messages using the phone ring as a covert channel.

+ +

Another classic example of using a covert channel is Port knocking.

+ +

SaveMySugar uses the distance between phone calls to represent Morse code symbols.

+ +

The idea of using phone rings to send information is not new, it was already used by the very cool xringd project by Angelo Haritsis.

+ +

Someone else also proposed it on Half Bakery.

+ +

However there seems to be no implementation of the technique for exchanging text messaging, and that's what SaveMySugar is about.

+ +

The name SaveMySugar was born as a take on the price of the old conventional Texting service which is quite high, see The True Price of SMS Messages, and it is also a reference to the distress signal Save Our Soul (SOS) used in Morse communications.

+
+ +
+

Why

+ +

There are several reasons why you may want to try SaveMySugar:

+ +
    +
  • Just because you can, and it is fun.
  • + +
  • It is a possible way to send a short message for free.
  • + +
  • It's beautifully slow.
  • +
+ +

Why not

+ +

SaveMySugar has some limitations:

+ +
    +
  • It's awfully slow.
  • + +
  • Phone rings keep the line busy.
  • + +
  • On mobile phones a ring uses a lot of battery, and battery is a precious resource.
  • + +
  • On mobile phones a lot of fake calls will pollute you calls log.
  • + +
  • On mobile phones a malicious recipient can make you pay at every ring!
  • + +
  • If anyone used it, it might end up like this.
  • +
+ +

However it is still fun nonetheless.

+
+ +
+

Where

+ +

You can find a prototype implementation written in python called python3-savemysugar.

+ +

There is also a prototype Android app SaveMySugar-0.1-debug.apk, its souce code is in the android-savemysugar repository.

+ +

Contact Antonio Ospite if you want to discuss about porting SaveMySugar to other platforms.

+
+ +
+

Who

+ +

From an idea by Corrado Rubera.
+ SaveMySugar was realized by Antonio Ospite.

+
+ +
+

How

+ +

This is how a message is transmitted with SaveMySugar:

+ +
    +
  1. The characters in the message are encoded in Morse signals.
  2. + +
  3. Every symbol of each signal is mapped to a time interval.
  4. + +
  5. Phone calls are distanced in time according to the intervals from above.
  6. +
+ +

On the receiving side the symmetric operations are performed when phone rings are detected.

+ +

This is basically a Pulse-Distance Modulation (PDM), this scheme has been chosen because it's easy to detect when a phone starts ringing, but it's not always easy to detect for how log it rings, or how many rings there are in a single call.

+ +

See an example of the exchange of the message CODEX:
+ SaveMySugar exchanging the message 'CODEX'

+ +

See an example of the exchange of the message Save My Sugar:
+ SaveMySugar exchanging the message 'Save My Sugar'

+ +

Morse code has been chosen because it is well known and serves very well the purpose of showing the technique.

+ +

In order for the exchange of the message to work symbols must be differentiated, so they must have different distances.

+ +

However the time between when the transmitter places a call and when the receiver gets the correspondent ring is not constant, so this “noise” must be taken into account by the receiver. This noise can have a quite high variability but can be usually upper and lower bounded, so a reasonably robust communication is still possible. Basically the noise is used to characterize the symbol distances.

+ +

See an example of best-case and worst-case symbol distances:
+ SaveMySugar symbols distances

+ +
+
+ + + + diff --git a/project/favicon/favicon.ico b/project/favicon/favicon.ico new file mode 100644 index 0000000..5de39fa Binary files /dev/null and b/project/favicon/favicon.ico differ diff --git a/project/favicon/favicon.xcf b/project/favicon/favicon.xcf new file mode 100644 index 0000000..4dcdc77 Binary files /dev/null and b/project/favicon/favicon.xcf differ diff --git a/project/favicon/to_ico.sh b/project/favicon/to_ico.sh new file mode 100755 index 0000000..a4dd9d0 --- /dev/null +++ b/project/favicon/to_ico.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +set -e + +XCF_FILE="favicon.xcf" + +BASENAME="$(basename "$XCF_FILE" .xcf)" + +PPM_FILE="${BASENAME}.ppm" +PPM_FILE_4BPP="${BASENAME}_4bpp.ppm" +ICO_FILE="${BASENAME}.ico" + +convert "$XCF_FILE" "$PPM_FILE" + +ppmquant 16 "$PPM_FILE" > "$PPM_FILE_4BPP" +rm "$PPM_FILE" + +ppmtowinicon "$PPM_FILE_4BPP" > "$ICO_FILE" +rm "$PPM_FILE_4BPP" diff --git a/project/logo/icon.svg b/project/logo/icon.svg new file mode 100644 index 0000000..208d974 --- /dev/null +++ b/project/logo/icon.svg @@ -0,0 +1,114 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/project/logo/logo.svg b/project/logo/logo.svg new file mode 100644 index 0000000..076e50f --- /dev/null +++ b/project/logo/logo.svg @@ -0,0 +1,186 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/style.scss b/style.scss new file mode 100644 index 0000000..9d2e87d --- /dev/null +++ b/style.scss @@ -0,0 +1,107 @@ +@import "normalize"; +@import "susy"; + +@import "breakpoint"; +@include breakpoint-set('to ems', true); + +@import "compass/css3"; +@import "compass/typography/links/link-colors"; +@import "compass/utilities/general/clearfix"; + +// See [1] below +@include border-box-sizing; + +$susy: ( +container: 70em, +columns: 12, +global-box-sizing: border-box, // [1] http://stackoverflow.com/questions/27590328 +gutters: 1/6, +); + +$text-color: rgba(0, 0, 0, 0.87); + +$background-color: #fafafa; +$background-color-alternate: #f5f5f5; + +// Blue from Android Material +$primary-color: #1976d2; // 700 +$primary-color-darker: #0d47a1; // 900 +$primary-color-lighter: #2196f3; // 500 + +// Deep Orange from Android Material +$accent-color: #dd2c00; // A700 +$accent-color-lighter: #ff3d00; // A400 +$accent-color-darker: #bf360c; // 900 + + +// Flexible objects +img, embed, object, video +{ + max-width: 100%; + padding-top: .5em; +} + +body { + font-family: Cambria, Georgia, "Times New Roman", Times, serif; + background: $background-color; + color: $text-color; + + @include container; + padding: gutter(12); +} + +abbr, acronym { + border-bottom: 1px dashed $primary-color; +} + +h1, h2, h3, h4, h5, h6 { + color: $primary-color; + a { + @include link-colors($primary-color, $primary-color-lighter, $primary-color, $primary-color-darker, $primary-color); + } +} + +a { + @include link-colors($accent-color, $accent-color-lighter, $accent-color, $accent-color-darker, $accent-color); + text-decoration: none; +} + +.block { + @include span(full); +} + +#header { + h1 { + margin-top: .2em; + } +} + +#main-content { + .block { + padding: gutter(12); + margin-bottom: gutter(12); + + @include border-radius(.5em); + @include box-shadow($primary-color-darker 0px 2px 3px); + background: $background-color-alternate; + border: $primary-color-lighter 1px solid; + } +} + +@include breakpoint(481px) { + #what, #where { + @include span(6 of 12); + } + #why, #who { + @include span(6 last of 12); + } +} + +@include breakpoint(769px) { + #what, #why { + @include span(4); + } + #who, #where { + @include span(4 last of 12); + } +}