Compare commits

...

49 commits

Author SHA1 Message Date
a24451e654 Merge branch 'master' of freebird/autodifesa-digitale-parte-1 into master 2022-01-11 18:45:33 +01:00
d044d133b0 Update 'slides/navigare.md'
one more slide for cut&paste risk
2022-01-06 20:30:57 +01:00
c028a406db feedbro e' chiuso e ha una licenza poco chiara, sostituito con Brief 2020-03-18 11:12:58 +01:00
les
988240c9b6 typo 2019-10-09 23:49:43 +02:00
a4a147c480 Aggiorna 'README.md' 2019-06-12 19:08:37 +02:00
46b7a26bb1 Aggiorna 'README.md' 2019-06-12 19:07:11 +02:00
ccd6ba2f1e aggiornamenti 2019-05-23 00:35:56 +02:00
bic
dd2c475d46
add strumenti radicali
Signed-off-by: bic <bicno@autistici.org>
2019-04-08 19:25:55 +02:00
bic
5d0faa8d75
fix e format
Signed-off-by: bic <bicno@autistici.org>
2019-04-08 19:25:36 +02:00
bic
98c38e68ce
yo
Signed-off-by: bic <bicno@autistici.org>
2019-04-08 17:47:37 +02:00
bic
9dfb9ec976
white space
Signed-off-by: bic <bicno@autistici.org>
2019-04-08 17:47:27 +02:00
bic
a12fc3d710
porcodio le foto da riscossa cristiana
Signed-off-by: bic <bicno@autistici.org>
2019-04-08 17:44:09 +02:00
8b1089874a
. 2019-01-09 00:06:49 +01:00
a71cfbb13d
... 2018-11-14 17:50:33 +01:00
5f546a3ec6
piglia bene 2018-11-14 02:00:23 +01:00
fbdac64915
a caso 2018-10-07 01:36:02 +02:00
c5fda97fa4
pwd js 2018-10-01 00:19:54 +02:00
fa2da6a000
pwd/memi/fs/dati 2018-09-30 02:00:50 +02:00
80bb4c9f96
appunti 2018-09-25 22:57:11 +02:00
b670b2f824
. 2018-09-25 22:57:11 +02:00
4d6c5c6d54 work in progress 2018-09-25 21:47:30 +02:00
079d92aef7 Carica file su 'slides' 2018-09-22 19:17:01 +02:00
63c3144029 Elimina 'slides/liberta.md' 2018-09-22 19:11:16 +02:00
918accf948 Aggiorna 'slides/liberta.md' 2018-09-22 19:02:12 +02:00
febfbde6b8 Carica file su 'slides' 2018-09-22 19:00:46 +02:00
e14a714860 Aggiorna 'slides/liberta.md' 2018-09-22 16:52:25 +02:00
492e4a1b82 Aggiorna 'slides/liberta.md' 2018-09-16 18:09:20 +02:00
8f64987e39 Update 'slides/liberta.md' 2018-09-09 19:18:36 +02:00
fc18a9f897 Update 'slides/liberta.md' 2018-09-09 19:03:59 +02:00
2437a39221
add hash link 2018-09-09 00:37:20 +02:00
c0415c3393
dati/anon/cose 2018-09-04 22:40:26 +02:00
d643999537
navigare / password 2018-08-29 01:40:50 +02:00
7a238de401 split dati perche' scrivo in inglese? 2018-08-08 18:13:32 +02:00
bd01fd3e61 cleaning password 2018-08-08 18:12:51 +02:00
d4ba202469 on passwords 2018-08-07 23:35:07 +02:00
bd0e972549 minor 2018-08-07 23:32:39 +02:00
d519ed1f40 boh 2018-07-27 00:21:50 +02:00
0899b49b3c altre cose 2018-07-24 16:16:08 +02:00
f9cf70cb12 aggiornamenti del mercoledi 2018-07-19 00:26:44 +02:00
4b1328ae7e appunti a caso che capisco solo io per ora :P 2018-07-18 14:31:11 +02:00
776a746dc7 cazzate 2018-07-15 23:33:58 +02:00
4468ee8b5a minor 2018-07-15 23:33:26 +02:00
4dee14702d colorini 2018-07-15 23:32:21 +02:00
2dd005af22 README 2018-07-15 23:32:13 +02:00
28700b8d83 grunt watch slides 2018-07-15 23:31:29 +02:00
f4c05b43a7 split slides, test fragments, notes ... 2018-07-15 11:42:13 +02:00
dceb7b6821 cleaning (a proposito di metadati...) 2018-07-15 11:41:36 +02:00
8f29083263 add .gitignore 2018-07-15 11:41:16 +02:00
d120cb3fa7 update reveal 2018-07-15 10:36:08 +02:00
75 changed files with 10638 additions and 3755 deletions

13
.gitignore vendored Normal file
View file

@ -0,0 +1,13 @@
.idea/
*.iml
*.iws
*.eml
out/
.DS_Store
.svn
log/*.log
tmp/**
node_modules/
.sass-cache
css/reveal.min.css
js/reveal.min.js

View file

@ -12,7 +12,7 @@ module.exports = function(grunt) {
banner:
'/*!\n' +
' * reveal.js <%= pkg.version %> (<%= grunt.template.today("yyyy-mm-dd, HH:MM") %>)\n' +
' * http://lab.hakim.se/reveal-js\n' +
' * http://revealjs.com\n' +
' * MIT licensed\n' +
' *\n' +
' * Copyright (C) 2017 Hakim El Hattab, http://hakim.se\n' +
@ -25,7 +25,8 @@ module.exports = function(grunt) {
uglify: {
options: {
banner: '<%= meta.banner %>\n'
banner: '<%= meta.banner %>\n',
screwIE8: false
},
build: {
src: 'js/reveal.js',
@ -35,34 +36,31 @@ module.exports = function(grunt) {
sass: {
core: {
files: {
'css/reveal.css': 'css/reveal.scss',
}
src: 'css/reveal.scss',
dest: 'css/reveal.css'
},
themes: {
files: [
{
expand: true,
cwd: 'css/theme/source',
src: ['*.sass', '*.scss'],
dest: 'css/theme',
ext: '.css'
}
]
expand: true,
cwd: 'css/theme/source',
src: ['*.sass', '*.scss'],
dest: 'css/theme',
ext: '.css'
}
},
autoprefixer: {
dist: {
core: {
src: 'css/reveal.css'
}
},
cssmin: {
options: {
compatibility: 'ie9'
},
compress: {
files: {
'css/reveal.min.css': [ 'css/reveal.css' ]
}
src: 'css/reveal.css',
dest: 'css/reveal.min.css'
}
},
@ -72,7 +70,7 @@ module.exports = function(grunt) {
eqeqeq: true,
immed: true,
esnext: true,
latedef: true,
latedef: 'nofunc',
newcap: true,
noarg: true,
sub: true,
@ -98,22 +96,25 @@ module.exports = function(grunt) {
port: port,
base: root,
livereload: true,
open: true
open: true,
useAvailablePort: true
}
},
}
},
zip: {
'reveal-js-presentation.zip': [
'index.html',
'css/**',
'js/**',
'lib/**',
'images/**',
'plugin/**',
'**.md'
]
bundle: {
src: [
'index.html',
'css/**',
'js/**',
'lib/**',
'images/**',
'plugin/**',
'**.md'
],
dest: 'reveal-js-presentation.zip'
}
},
watch: {
@ -138,7 +139,7 @@ module.exports = function(grunt) {
files: root.map(path => path + '/*.html')
},
markdown: {
files: root.map(path => path + '/*.md')
files: root.map(path => path + '/slides/*.md')
},
options: {
livereload: true
@ -146,25 +147,24 @@ module.exports = function(grunt) {
},
retire: {
js: ['js/reveal.js', 'lib/js/*.js', 'plugin/**/*.js'],
node: ['.'],
options: {}
js: [ 'js/reveal.js', 'lib/js/*.js', 'plugin/**/*.js' ],
node: [ '.' ]
}
});
// Dependencies
grunt.loadNpmTasks( 'grunt-contrib-qunit' );
grunt.loadNpmTasks( 'grunt-contrib-jshint' );
grunt.loadNpmTasks( 'grunt-contrib-connect' );
grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
grunt.loadNpmTasks( 'grunt-contrib-jshint' );
grunt.loadNpmTasks( 'grunt-contrib-qunit' );
grunt.loadNpmTasks( 'grunt-contrib-uglify' );
grunt.loadNpmTasks( 'grunt-contrib-watch' );
grunt.loadNpmTasks( 'grunt-sass' );
grunt.loadNpmTasks( 'grunt-contrib-connect' );
grunt.loadNpmTasks( 'grunt-autoprefixer' );
grunt.loadNpmTasks( 'grunt-zip' );
grunt.loadNpmTasks( 'grunt-retire' );
grunt.loadNpmTasks( 'grunt-sass' );
grunt.loadNpmTasks( 'grunt-zip' );
// Default task
grunt.registerTask( 'default', [ 'css', 'js' ] );

View file

@ -1,3 +1,38 @@
Presentazione fatta ad hackmeeting 0x16
Autodifesa Digitale I
(intera directory reveal.js)
Slides di autodifesa digitale.
## Usare
Questa presentazione e' pensata per essere fatta in 3 sessioni da 2 ore l'una o 2 sessioni da tre ore l'una,
ma e' stata fatta anche in una sola sessione da tre ore (tutte le persone presenti sono soprattissute).
Clona questo repo con:
`git clone https://git.lattuga.net/cisti/autodifesa-digitale-parte-1.git`
Apri `index.html` con qualsiasi browser.
Se vuoi fare il figo e stai usando un proiettore (non mirrorato)
premi `S` (se viene fuori un messaggio di warning riguardo
le finestre di popup, abilita i popup per questa tab).
## Modificare
Clona questo repo con:
`git clone https://git.lattuga.net/cisti/autodifesa-digitale-parte-1.git`
Installa le dipendenze:
`npm install` o `yarn`
Fai partire il server livereload di grunt:
`grunt serve`
Verrà scritto qualcosa come: `Started connect web server on http://localhost:8000`
aprendo quell'indirizzo da un browser dovresti vedere la presentazione.
Le slides sono scritte in markdown e separate per argomenti nella
cartella `/slides`, ad ogni modifica `grunt` farà un refresh del browser,
mantenendo la slides corrente.
## Esportare
eee ti piacerebbe :) non sono ancora arrivato li', in pdf dovrebbe essere facile pero'.

42
appunti Normal file
View file

@ -0,0 +1,42 @@
# aggiungere
- imsi catcher
- adnauseam
# 2 ore non bastano, dividere in 3/4 puntate,
# la teoria e' noiosa, troviamo altri modi per comunicare,
# challenge a casa (guarda un sito via tor, visita un .onion, manda una mail cifrata, firmata....)
# tanti aneddoti!
#
# intro - 15 min
#
# intro
- ci sarebbero troppe cose da dire
- vorresti faticare il meno possibile, ma devi accendere il cervello
l'illusione della sicurezza e' molto peggio della consapevolezza netta di essere vulnerabili.
- in generale, stai delegando, cerca di farlo meno possibile.
- chi dice di non avere nulla da nascondere non prende in considerazione il futuro
- intimita' non privacy
ci sono degli strumenti e degli utilizzi appropriati, la domanda non e'
usare o meno le tecnologie, ma quando e perche'.
--
crittografia nei messaggi:
- riservatezza (impedire letture terze)
autenticita' (l'autore e' chi dice di essere)
integrita' (non modificato)
la crittografia non nasconde i messaggi ma li protegge (steganografia).
(metadati nelle comunicazioni)
--
il seminario polpettone che palle, ci vuole interazione,
gif animate e immaginine, scenette teatrali pensate bene,
forse anche delle challenge (guarda un sito con tor, manda una mail cifrata).
come funziona internet, dns.
gestione identita', concetto di identita', pseudonimi, fb, anonymous, luther blissett, anonimato.

View file

@ -1,11 +1,11 @@
{
"name": "reveal.js",
"version": "3.5.0",
"version": "3.6.0",
"main": [
"js/reveal.js",
"css/reveal.css"
],
"homepage": "http://lab.hakim.se/reveal-js/",
"homepage": "http://revealjs.com",
"license": "MIT",
"description": "The HTML Presentation Framework",
"authors": [

View file

@ -144,9 +144,14 @@ ul, ol, div, p {
}
/* Display slide speaker notes when 'showNotes' is enabled */
.reveal.show-notes {
max-width: none;
max-height: none;
}
.reveal .speaker-notes-pdf {
display: block;
width: 100%;
height: auto;
max-height: none;
top: auto;
right: auto;
@ -162,6 +167,7 @@ ul, ol, div, p {
background-color: transparent;
padding: 20px;
page-break-after: always;
border: 0;
}
/* Display slide numbers when 'slideNumber' is enabled */

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
/*!
* reveal.js
* http://lab.hakim.se/reveal-js
* http://revealjs.com
* MIT licensed
*
* Copyright (C) 2017 Hakim El Hattab, http://hakim.se
@ -235,90 +235,279 @@ body {
* CONTROLS
*********************************************/
@keyframes bounce-right {
0%, 10%, 25%, 40%, 50% {transform: translateX(0);}
20% {transform: translateX(10px);}
30% {transform: translateX(-5px);}
}
@keyframes bounce-down {
0%, 10%, 25%, 40%, 50% {transform: translateY(0);}
20% {transform: translateY(10px);}
30% {transform: translateY(-5px);}
}
$controlArrowSize: 3.6em;
$controlArrowSpacing: 1.4em;
$controlArrowLength: 2.6em;
$controlArrowThickness: 0.5em;
$controlsArrowAngle: 45deg;
$controlsArrowAngleHover: 40deg;
$controlsArrowAngleActive: 36deg;
@mixin controlsArrowTransform( $angle ) {
&:before {
transform: translateX(($controlArrowSize - $controlArrowLength)/2) translateY(($controlArrowSize - $controlArrowThickness)/2) rotate( $angle );
}
&:after {
transform: translateX(($controlArrowSize - $controlArrowLength)/2) translateY(($controlArrowSize - $controlArrowThickness)/2) rotate( -$angle );
}
}
.reveal .controls {
$spacing: 12px;
display: none;
position: fixed;
width: 110px;
height: 110px;
z-index: 30;
right: 10px;
bottom: 10px;
-webkit-user-select: none;
}
.reveal .controls button {
padding: 0;
position: absolute;
opacity: 0.05;
width: 0;
height: 0;
background-color: transparent;
border: 12px solid transparent;
transform: scale(.9999);
transition: all 0.2s ease;
-webkit-appearance: none;
-webkit-tap-highlight-color: rgba( 0, 0, 0, 0 );
top: auto;
bottom: $spacing;
right: $spacing;
left: auto;
z-index: 1;
color: #000;
pointer-events: none;
font-size: 10px;
button {
position: absolute;
padding: 0;
background-color: transparent;
border: 0;
outline: 0;
cursor: pointer;
color: currentColor;
transform: scale(.9999);
transition: color 0.2s ease,
opacity 0.2s ease,
transform 0.2s ease;
z-index: 2; // above slides
pointer-events: auto;
font-size: inherit;
visibility: hidden;
opacity: 0;
-webkit-appearance: none;
-webkit-tap-highlight-color: rgba( 0, 0, 0, 0 );
}
.controls-arrow:before,
.controls-arrow:after {
content: '';
position: absolute;
top: 0;
left: 0;
width: $controlArrowLength;
height: $controlArrowThickness;
border-radius: $controlArrowThickness/2;
background-color: currentColor;
transition: all 0.15s ease, background-color 0.8s ease;
transform-origin: floor(($controlArrowThickness/2)*10)/10 50%;
will-change: transform;
}
.controls-arrow {
position: relative;
width: $controlArrowSize;
height: $controlArrowSize;
@include controlsArrowTransform( $controlsArrowAngle );
&:hover {
@include controlsArrowTransform( $controlsArrowAngleHover );
}
&:active {
@include controlsArrowTransform( $controlsArrowAngleActive );
}
}
.navigate-left {
right: $controlArrowSize + $controlArrowSpacing*2;
bottom: $controlArrowSpacing + $controlArrowSize/2;
transform: translateX( -10px );
}
.navigate-right {
right: 0;
bottom: $controlArrowSpacing + $controlArrowSize/2;
transform: translateX( 10px );
.controls-arrow {
transform: rotate( 180deg );
}
&.highlight {
animation: bounce-right 2s 50 both ease-out;
}
}
.navigate-up {
right: $controlArrowSpacing + $controlArrowSize/2;
bottom: $controlArrowSpacing*2 + $controlArrowSize;
transform: translateY( -10px );
.controls-arrow {
transform: rotate( 90deg );
}
}
.navigate-down {
right: $controlArrowSpacing + $controlArrowSize/2;
bottom: 0;
transform: translateY( 10px );
.controls-arrow {
transform: rotate( -90deg );
}
&.highlight {
animation: bounce-down 2s 50 both ease-out;
}
}
// Back arrow style: "faded":
// Deemphasize backwards navigation arrows in favor of drawing
// attention to forwards navigation
&[data-controls-back-arrows="faded"] .navigate-left.enabled,
&[data-controls-back-arrows="faded"] .navigate-up.enabled {
opacity: 0.3;
&:hover {
opacity: 1;
}
}
// Back arrow style: "hidden":
// Never show arrows for backwards navigation
&[data-controls-back-arrows="hidden"] .navigate-left.enabled,
&[data-controls-back-arrows="hidden"] .navigate-up.enabled {
opacity: 0;
visibility: hidden;
}
// Any control button that can be clicked is "enabled"
.enabled {
visibility: visible;
opacity: 0.9;
cursor: pointer;
transform: none;
}
// Any control button that leads to showing or hiding
// a fragment
.enabled.fragmented {
opacity: 0.5;
}
.enabled:hover,
.enabled.fragmented:hover {
opacity: 1;
}
}
.reveal .controls .enabled {
opacity: 0.7;
cursor: pointer;
// Adjust the layout when there are no vertical slides
.reveal:not(.has-vertical-slides) .controls .navigate-left {
bottom: $controlArrowSpacing;
right: 0.5em + $controlArrowSpacing + $controlArrowSize;
}
.reveal .controls .enabled:active {
margin-top: 1px;
.reveal:not(.has-vertical-slides) .controls .navigate-right {
bottom: $controlArrowSpacing;
right: 0.5em;
}
.reveal .controls .navigate-left {
top: 42px;
// Adjust the layout when there are no horizontal slides
.reveal:not(.has-horizontal-slides) .controls .navigate-up {
right: $controlArrowSpacing;
bottom: $controlArrowSpacing + $controlArrowSize;
}
.reveal:not(.has-horizontal-slides) .controls .navigate-down {
right: $controlArrowSpacing;
bottom: 0.5em;
}
border-right-width: 22px;
border-right-color: #000;
}
.reveal .controls .navigate-left.fragmented {
opacity: 0.3;
// Invert arrows based on background color
.reveal.has-dark-background .controls {
color: #fff;
}
.reveal.has-light-background .controls {
color: #000;
}
// Disable active states on touch devices
.reveal.no-hover .controls .controls-arrow:hover,
.reveal.no-hover .controls .controls-arrow:active {
@include controlsArrowTransform( $controlsArrowAngle );
}
// Edge aligned controls layout
@media screen and (min-width: 500px) {
$spacing: 8px;
.reveal .controls[data-controls-layout="edges"] {
& {
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.reveal .controls .navigate-right {
left: 74px;
top: 42px;
border-left-width: 22px;
border-left-color: #000;
}
.reveal .controls .navigate-right.fragmented {
opacity: 0.3;
.navigate-left,
.navigate-right,
.navigate-up,
.navigate-down {
bottom: auto;
right: auto;
}
.reveal .controls .navigate-up {
left: 42px;
border-bottom-width: 22px;
border-bottom-color: #000;
}
.reveal .controls .navigate-up.fragmented {
opacity: 0.3;
.navigate-left {
top: 50%;
left: $spacing;
margin-top: -$controlArrowSize/2;
}
.reveal .controls .navigate-down {
left: 42px;
top: 74px;
border-top-width: 22px;
border-top-color: #000;
}
.reveal .controls .navigate-down.fragmented {
opacity: 0.3;
.navigate-right {
top: 50%;
right: $spacing;
margin-top: -$controlArrowSize/2;
}
.navigate-up {
top: $spacing;
left: 50%;
margin-left: -$controlArrowSize/2;
}
.navigate-down {
bottom: $spacing;
left: 50%;
margin-left: -$controlArrowSize/2;
}
}
}
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
position: fixed;
position: absolute;
display: none;
height: 3px;
width: 100%;
@ -327,21 +516,22 @@ body {
z-index: 10;
background-color: rgba( 0, 0, 0, 0.2 );
color: #fff;
}
.reveal .progress:after {
content: '';
display: block;
position: absolute;
height: 20px;
height: 10px;
width: 100%;
top: -20px;
top: -10px;
}
.reveal .progress span {
display: block;
height: 100%;
width: 0px;
background-color: #000;
background-color: currentColor;
transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
}
@ -379,6 +569,16 @@ body {
touch-action: none;
}
// Mobile Safari sometimes overlays a header at the top
// of the page when in landscape mode. Using fixed
// positioning ensures that reveal.js reduces its height
// when this header is visible.
@media only screen and (orientation : landscape) {
.reveal.ua-iphone {
position: fixed;
}
}
.reveal .slides {
position: absolute;
width: 100%;
@ -1336,12 +1536,13 @@ body {
*********************************************/
.reveal .playback {
position: fixed;
position: absolute;
left: 15px;
bottom: 20px;
z-index: 30;
cursor: pointer;
transition: all 400ms ease;
-webkit-tap-highlight-color: rgba( 0, 0, 0, 0 );
}
.reveal.overview .playback {
@ -1410,37 +1611,84 @@ body {
.reveal .speaker-notes {
display: none;
position: absolute;
width: 70%;
max-height: 15%;
left: 15%;
bottom: 26px;
padding: 10px;
width: 25vw;
height: 100%;
top: 0;
left: 100%;
padding: 14px 18px 14px 18px;
z-index: 1;
font-size: 18px;
line-height: 1.4;
color: #fff;
background-color: rgba(0,0,0,0.5);
border: 1px solid rgba( 0, 0, 0, 0.05 );
color: #222;
background-color: #f5f5f5;
overflow: auto;
box-sizing: border-box;
text-align: left;
font-family: Helvetica, sans-serif;
-webkit-overflow-scrolling: touch;
.notes-placeholder {
color: #ccc;
font-style: italic;
}
&:focus {
outline: none;
}
&:before {
content: 'Speaker notes';
display: block;
margin-bottom: 10px;
opacity: 0.5;
}
}
.reveal .speaker-notes.visible:not(:empty) {
.reveal.show-notes {
max-width: 75vw;
overflow: visible;
}
.reveal.show-notes .speaker-notes {
display: block;
}
@media screen and (max-width: 1024px) {
@media screen and (min-width: 1600px) {
.reveal .speaker-notes {
font-size: 14px;
font-size: 20px;
}
}
@media screen and (max-width: 1024px) {
.reveal.show-notes {
border-left: 0;
max-width: none;
max-height: 70%;
overflow: visible;
}
.reveal.show-notes .speaker-notes {
top: 100%;
left: 0;
width: 100%;
height: (30/0.7)*1%;
}
}
@media screen and (max-width: 600px) {
.reveal.show-notes {
max-height: 60%;
}
.reveal.show-notes .speaker-notes {
top: 100%;
height: (40/0.6)*1%;
}
.reveal .speaker-notes {
width: 90%;
left: 5%;
font-size: 14px;
}
}

View file

@ -4,7 +4,7 @@ Themes are written using Sass to keep things modular and reduce the need for rep
## Creating a Theme
To create your own theme, start by duplicating a ```.scss``` file in [/css/theme/source](https://github.com/hakimel/reveal.js/blob/master/css/theme/source). It will be automatically compiled by Grunt from Sass to CSS (see the [Gruntfile](https://github.com/hakimel/reveal.js/blob/master/Gruntfile.js)) when you run `grunt css-themes`.
To create your own theme, start by duplicating a ```.scss``` file in [/css/theme/source](https://github.com/hakimel/reveal.js/blob/master/css/theme/source). It will be automatically compiled by Grunt from Sass to CSS (see the [Gruntfile](https://github.com/hakimel/reveal.js/blob/master/Gruntfile.js)) when you run `npm run build -- css-themes`.
Each theme file does four things in the following order:

View file

@ -126,10 +126,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@ -160,7 +156,8 @@ body {
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
@ -255,42 +252,17 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls .navigate-left,
.reveal .controls .navigate-left.enabled {
border-right-color: #8b743d; }
.reveal .controls .navigate-right,
.reveal .controls .navigate-right.enabled {
border-left-color: #8b743d; }
.reveal .controls .navigate-up,
.reveal .controls .navigate-up.enabled {
border-bottom-color: #8b743d; }
.reveal .controls .navigate-down,
.reveal .controls .navigate-down.enabled {
border-top-color: #8b743d; }
.reveal .controls .navigate-left.enabled:hover {
border-right-color: #c0a86e; }
.reveal .controls .navigate-right.enabled:hover {
border-left-color: #c0a86e; }
.reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #c0a86e; }
.reveal .controls .navigate-down.enabled:hover {
border-top-color: #c0a86e; }
.reveal .controls {
color: #8b743d; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #8b743d; }
.reveal .progress span {
background: #8b743d;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }

View file

@ -15,7 +15,7 @@ body {
background-color: #222; }
.reveal {
font-family: "Source Sans Pro", Helvetica, sans-serif;
font-family: "Lato Light", "Source Sans Pro", Helvetica, sans-serif;
font-size: 42px;
font-weight: normal;
color: #fff; }
@ -46,7 +46,7 @@ body {
.reveal h6 {
margin: 0 0 20px 0;
color: #fff;
font-family: "Source Sans Pro", Helvetica, sans-serif;
font-family: "Lato Light", "Source Sans Pro", Helvetica, sans-serif;
font-weight: 600;
line-height: 1.2;
letter-spacing: normal;
@ -122,10 +122,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@ -156,7 +152,8 @@ body {
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
@ -251,42 +248,17 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls .navigate-left,
.reveal .controls .navigate-left.enabled {
border-right-color: #42affa; }
.reveal .controls .navigate-right,
.reveal .controls .navigate-right.enabled {
border-left-color: #42affa; }
.reveal .controls .navigate-up,
.reveal .controls .navigate-up.enabled {
border-bottom-color: #42affa; }
.reveal .controls .navigate-down,
.reveal .controls .navigate-down.enabled {
border-top-color: #42affa; }
.reveal .controls .navigate-left.enabled:hover {
border-right-color: #8dcffc; }
.reveal .controls .navigate-right.enabled:hover {
border-left-color: #8dcffc; }
.reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #8dcffc; }
.reveal .controls .navigate-down.enabled:hover {
border-top-color: #8dcffc; }
.reveal .controls {
color: #42affa; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #42affa; }
.reveal .progress span {
background: #42affa;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }

View file

@ -125,10 +125,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@ -159,7 +155,8 @@ body {
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
@ -254,42 +251,17 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls .navigate-left,
.reveal .controls .navigate-left.enabled {
border-right-color: #a23; }
.reveal .controls .navigate-right,
.reveal .controls .navigate-right.enabled {
border-left-color: #a23; }
.reveal .controls .navigate-up,
.reveal .controls .navigate-up.enabled {
border-bottom-color: #a23; }
.reveal .controls .navigate-down,
.reveal .controls .navigate-down.enabled {
border-top-color: #a23; }
.reveal .controls .navigate-left.enabled:hover {
border-right-color: #dd5566; }
.reveal .controls .navigate-right.enabled:hover {
border-left-color: #dd5566; }
.reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #dd5566; }
.reveal .controls .navigate-down.enabled:hover {
border-top-color: #dd5566; }
.reveal .controls {
color: #a23; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #a23; }
.reveal .progress span {
background: #a23;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }

View file

@ -128,10 +128,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@ -162,7 +158,8 @@ body {
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
@ -257,42 +254,17 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls .navigate-left,
.reveal .controls .navigate-left.enabled {
border-right-color: #13DAEC; }
.reveal .controls .navigate-right,
.reveal .controls .navigate-right.enabled {
border-left-color: #13DAEC; }
.reveal .controls .navigate-up,
.reveal .controls .navigate-up.enabled {
border-bottom-color: #13DAEC; }
.reveal .controls .navigate-down,
.reveal .controls .navigate-down.enabled {
border-top-color: #13DAEC; }
.reveal .controls .navigate-left.enabled:hover {
border-right-color: #71e9f4; }
.reveal .controls .navigate-right.enabled:hover {
border-left-color: #71e9f4; }
.reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #71e9f4; }
.reveal .controls .navigate-down.enabled:hover {
border-top-color: #71e9f4; }
.reveal .controls {
color: #13DAEC; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #13DAEC; }
.reveal .progress span {
background: #13DAEC;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }

View file

@ -126,10 +126,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@ -160,7 +156,8 @@ body {
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
@ -255,42 +252,17 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls .navigate-left,
.reveal .controls .navigate-left.enabled {
border-right-color: #268bd2; }
.reveal .controls .navigate-right,
.reveal .controls .navigate-right.enabled {
border-left-color: #268bd2; }
.reveal .controls .navigate-up,
.reveal .controls .navigate-up.enabled {
border-bottom-color: #268bd2; }
.reveal .controls .navigate-down,
.reveal .controls .navigate-down.enabled {
border-top-color: #268bd2; }
.reveal .controls .navigate-left.enabled:hover {
border-right-color: #78b9e6; }
.reveal .controls .navigate-right.enabled:hover {
border-left-color: #78b9e6; }
.reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #78b9e6; }
.reveal .controls .navigate-down.enabled:hover {
border-top-color: #78b9e6; }
.reveal .controls {
color: #268bd2; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #268bd2; }
.reveal .progress span {
background: #268bd2;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }

View file

@ -120,10 +120,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@ -154,7 +150,8 @@ body {
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
@ -249,42 +246,17 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls .navigate-left,
.reveal .controls .navigate-left.enabled {
border-right-color: #e7ad52; }
.reveal .controls .navigate-right,
.reveal .controls .navigate-right.enabled {
border-left-color: #e7ad52; }
.reveal .controls .navigate-up,
.reveal .controls .navigate-up.enabled {
border-bottom-color: #e7ad52; }
.reveal .controls .navigate-down,
.reveal .controls .navigate-down.enabled {
border-top-color: #e7ad52; }
.reveal .controls .navigate-left.enabled:hover {
border-right-color: #f3d7ac; }
.reveal .controls .navigate-right.enabled:hover {
border-left-color: #f3d7ac; }
.reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #f3d7ac; }
.reveal .controls .navigate-down.enabled:hover {
border-top-color: #f3d7ac; }
.reveal .controls {
color: #e7ad52; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #e7ad52; }
.reveal .progress span {
background: #e7ad52;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }

View file

@ -122,10 +122,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@ -156,7 +152,8 @@ body {
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
@ -251,42 +248,17 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls .navigate-left,
.reveal .controls .navigate-left.enabled {
border-right-color: #51483D; }
.reveal .controls .navigate-right,
.reveal .controls .navigate-right.enabled {
border-left-color: #51483D; }
.reveal .controls .navigate-up,
.reveal .controls .navigate-up.enabled {
border-bottom-color: #51483D; }
.reveal .controls .navigate-down,
.reveal .controls .navigate-down.enabled {
border-top-color: #51483D; }
.reveal .controls .navigate-left.enabled:hover {
border-right-color: #8b7c69; }
.reveal .controls .navigate-right.enabled:hover {
border-left-color: #8b7c69; }
.reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #8b7c69; }
.reveal .controls .navigate-down.enabled:hover {
border-top-color: #8b7c69; }
.reveal .controls {
color: #51483D; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #51483D; }
.reveal .progress span {
background: #51483D;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }

View file

@ -125,10 +125,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@ -159,7 +155,8 @@ body {
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
@ -254,42 +251,17 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls .navigate-left,
.reveal .controls .navigate-left.enabled {
border-right-color: #00008B; }
.reveal .controls .navigate-right,
.reveal .controls .navigate-right.enabled {
border-left-color: #00008B; }
.reveal .controls .navigate-up,
.reveal .controls .navigate-up.enabled {
border-bottom-color: #00008B; }
.reveal .controls .navigate-down,
.reveal .controls .navigate-down.enabled {
border-top-color: #00008B; }
.reveal .controls .navigate-left.enabled:hover {
border-right-color: #0000f1; }
.reveal .controls .navigate-right.enabled:hover {
border-left-color: #0000f1; }
.reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #0000f1; }
.reveal .controls .navigate-down.enabled:hover {
border-top-color: #0000f1; }
.reveal .controls {
color: #00008B; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #00008B; }
.reveal .progress span {
background: #00008B;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }

View file

@ -129,10 +129,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@ -163,7 +159,8 @@ body {
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
@ -258,42 +255,17 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls .navigate-left,
.reveal .controls .navigate-left.enabled {
border-right-color: #3b759e; }
.reveal .controls .navigate-right,
.reveal .controls .navigate-right.enabled {
border-left-color: #3b759e; }
.reveal .controls .navigate-up,
.reveal .controls .navigate-up.enabled {
border-bottom-color: #3b759e; }
.reveal .controls .navigate-down,
.reveal .controls .navigate-down.enabled {
border-top-color: #3b759e; }
.reveal .controls .navigate-left.enabled:hover {
border-right-color: #74a7cb; }
.reveal .controls .navigate-right.enabled:hover {
border-left-color: #74a7cb; }
.reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #74a7cb; }
.reveal .controls .navigate-down.enabled:hover {
border-top-color: #74a7cb; }
.reveal .controls {
color: #3b759e; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #3b759e; }
.reveal .progress span {
background: #3b759e;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }

View file

@ -126,10 +126,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@ -160,7 +156,8 @@ body {
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
@ -255,42 +252,17 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls .navigate-left,
.reveal .controls .navigate-left.enabled {
border-right-color: #268bd2; }
.reveal .controls .navigate-right,
.reveal .controls .navigate-right.enabled {
border-left-color: #268bd2; }
.reveal .controls .navigate-up,
.reveal .controls .navigate-up.enabled {
border-bottom-color: #268bd2; }
.reveal .controls .navigate-down,
.reveal .controls .navigate-down.enabled {
border-top-color: #268bd2; }
.reveal .controls .navigate-left.enabled:hover {
border-right-color: #78b9e6; }
.reveal .controls .navigate-right.enabled:hover {
border-left-color: #78b9e6; }
.reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #78b9e6; }
.reveal .controls .navigate-down.enabled:hover {
border-top-color: #78b9e6; }
.reveal .controls {
color: #268bd2; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #268bd2; }
.reveal .progress span {
background: #268bd2;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }

View file

@ -22,8 +22,8 @@ $mainColor: #fff;
$headingColor: #fff;
$mainFontSize: 42px;
$mainFont: 'Source Sans Pro', Helvetica, sans-serif;
$headingFont: 'Source Sans Pro', Helvetica, sans-serif;
$mainFont: 'Lato Light', 'Source Sans Pro', Helvetica, sans-serif;
$headingFont: 'Lato Light', 'Source Sans Pro', Helvetica, sans-serif;
$headingTextShadow: none;
$headingLetterSpacing: normal;
$headingTextTransform: uppercase;

View file

@ -134,11 +134,6 @@ body {
margin-left: 40px;
}
.reveal q,
.reveal blockquote {
quotes: none;
}
.reveal blockquote {
display: block;
position: relative;
@ -174,8 +169,10 @@ body {
box-shadow: 0px 0px 6px rgba(0,0,0,0.3);
}
.reveal code {
font-family: monospace;
text-transform: none;
}
.reveal pre code {
@ -297,40 +294,8 @@ body {
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls .navigate-left,
.reveal .controls .navigate-left.enabled {
border-right-color: $linkColor;
}
.reveal .controls .navigate-right,
.reveal .controls .navigate-right.enabled {
border-left-color: $linkColor;
}
.reveal .controls .navigate-up,
.reveal .controls .navigate-up.enabled {
border-bottom-color: $linkColor;
}
.reveal .controls .navigate-down,
.reveal .controls .navigate-down.enabled {
border-top-color: $linkColor;
}
.reveal .controls .navigate-left.enabled:hover {
border-right-color: $linkColorHover;
}
.reveal .controls .navigate-right.enabled:hover {
border-left-color: $linkColorHover;
}
.reveal .controls .navigate-up.enabled:hover {
border-bottom-color: $linkColorHover;
}
.reveal .controls .navigate-down.enabled:hover {
border-top-color: $linkColorHover;
.reveal .controls {
color: $linkColor;
}
@ -340,10 +305,9 @@ body {
.reveal .progress {
background: rgba(0,0,0,0.2);
color: $linkColor;
}
.reveal .progress span {
background: $linkColor;
-webkit-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
-moz-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);

View file

@ -122,10 +122,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@ -156,7 +152,8 @@ body {
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
@ -251,42 +248,17 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls .navigate-left,
.reveal .controls .navigate-left.enabled {
border-right-color: #2a76dd; }
.reveal .controls .navigate-right,
.reveal .controls .navigate-right.enabled {
border-left-color: #2a76dd; }
.reveal .controls .navigate-up,
.reveal .controls .navigate-up.enabled {
border-bottom-color: #2a76dd; }
.reveal .controls .navigate-down,
.reveal .controls .navigate-down.enabled {
border-top-color: #2a76dd; }
.reveal .controls .navigate-left.enabled:hover {
border-right-color: #6ca0e8; }
.reveal .controls .navigate-right.enabled:hover {
border-left-color: #6ca0e8; }
.reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #6ca0e8; }
.reveal .controls .navigate-down.enabled:hover {
border-top-color: #6ca0e8; }
.reveal .controls {
color: #2a76dd; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #2a76dd; }
.reveal .progress span {
background: #2a76dd;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }

View file

@ -44,7 +44,7 @@
<h1>Reveal.js</h1>
<h3>The HTML Presentation Framework</h3>
<p>
<small>Created by <a href="http://hakim.se">Hakim El Hattab</a> / <a href="http://twitter.com/hakimel">@hakimel</a></small>
<small>Created by <a href="http://hakim.se">Hakim El Hattab</a> and <a href="https://github.com/hakimel/reveal.js/graphs/contributors">contributors</a></small>
</p>
</section>
@ -83,7 +83,7 @@
<section>
<h2>Slides</h2>
<p>
Not a coder? Not a problem. There's a fully-featured visual editor for authoring these, try it out at <a href="http://slides.com" target="_blank">http://slides.com</a>.
Not a coder? Not a problem. There's a fully-featured visual editor for authoring these, try it out at <a href="https://slides.com" target="_blank">https://slides.com</a>.
</p>
</section>
@ -295,8 +295,7 @@ function linkify( selector ) {
<section>
<h2>Clever Quotes</h2>
<p>
These guys come in two forms, inline: <q cite="http://searchservervirtualization.techtarget.com/definition/Our-Favorite-Technology-Quotations">
&ldquo;The nice thing about standards is that there are so many to choose from&rdquo;</q> and block:
These guys come in two forms, inline: <q cite="http://searchservervirtualization.techtarget.com/definition/Our-Favorite-Technology-Quotations">The nice thing about standards is that there are so many to choose from</q> and block:
</p>
<blockquote cite="http://searchservervirtualization.techtarget.com/definition/Our-Favorite-Technology-Quotations">
&ldquo;For years there has been a theory that millions of monkeys typing at random on millions of typewriters would
@ -370,7 +369,7 @@ Reveal.addEventListener( 'customevent', function() {
<section style="text-align: left;">
<h1>THE END</h1>
<p>
- <a href="http://slides.com">Try the online editor</a> <br>
- <a href="https://slides.com">Try the online editor</a> <br>
- <a href="https://github.com/hakimel/reveal.js">Source code &amp; documentation</a>
</p>
</section>
@ -399,6 +398,7 @@ Reveal.addEventListener( 'customevent', function() {
{ src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: 'plugin/search/search.js', async: true },
{ src: 'plugin/zoom-js/zoom.js', async: true },
{ src: 'plugin/notes/notes.js', async: true }
]

BIN
img/ai-book-cover-hi.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
img/anon.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 KiB

BIN
img/antani.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

BIN
img/brodino.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

BIN
img/comunicazione.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
img/copertina.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

BIN
img/cybertonia.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

BIN
img/freedom.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

BIN
img/hd.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
img/internet.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
img/metadata.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
img/passhint.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
img/password-requisiti.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
img/password_strength.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

BIN
img/pasta-e-forchetta.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

BIN
img/scimmia.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
img/think.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

BIN
img/tor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View file

@ -1,660 +1,153 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>reveal.js</title>
<link rel="stylesheet" href="css/reveal.css">
<link rel="stylesheet" href="css/theme/black.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<style type="text/css">
.right { float: right; }
</style>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-markdown>
# Autodifesa digitale
## (parte 1)
</section>
<section data-markdown>
# Perchè questo workshop
## Necessità di autodifesa digitale
</section>
<section data-markdown>
## Cosa vedremo oggi?
* Installazione Sistema Operativo Linux
* Configurazione di strumenti base per proteggere nostri dati
</section>
<section data-markdown>
# Perchè Linux?
## Free e Open Source
### Libertà di:
* eseguire software per qualsiasi scopo.
* studiare il software e modificarlo.
* ridistribuire copie (anche modificate)
</section>
<section data-markdown>
# Inoltre Linux
* Molto personalizzabile
* Leggero (funziona bene anche su pc datati e poco potenti)
</section>
<section data-markdown>
# Distribuzioni Linux
Una distribuzione Linux (gergalmente "distro") è un insieme di software che costituisce un sistema operativo realizzato a partire da un kernel Linux comune(cuore).
</section>
<section>
<section data-markdown>
# Scelta della distribuzione
Useremo Xubuntu LTS (long time support) dura 5 anni (https://xubuntu.org/getxubuntu/ a 64bit)
Altre: Debian, Mint
</section>
<section data-markdown>
### Xubuntu
![](./img/xubuntu.png)
</section>
<section data-markdown>
### Debian
![](./img/debiangnome.png)
</section>
<section data-markdown>
### Mint
![](./img/cinnamon2.png)
</section>
</section>
<section data-markdown>
### Perchè usiamo questa distribuzione?
* performante anche su vecchi pc
* ambiente grafico abbastanza leggero e funzionale
* anche per utenti alle prime armi perchè molto simile all'interfaccia a cui si è abituati.
</section>
<section>
<section data-markdown>
## Prima di iniziare l'installazione
Creazione CD o chiavetta USB con Xubuntu
![](./img/usb-cd.jpg)
</section>
<section data-markdown>
## Download Immagine e verifica MD5
(Approfondimento)
</section>
</section>
<section>
<section data-markdown>
# Modifiche al BIOS
* Ordine di Boot (usb, cdrom)
* Salva e riavvia
</section>
<section data-markdown>
## Boot
![](./img/bios-boot.jpg)
</section>
<section data-markdown>
## save and exit
![](./img/bios-save.png)
</section>
<section data-markdown>
# UEFI
(Approfondimento)
</section>
</section>
<section>
<section data-markdown>
## Fasi dell'installazione
### Passaggi semplici:
Lingua, tipo di tastiera, timezone
### Passaggi importanti:
Cifratura disco e partizionamento, utente e password
</section>
<section data-markdown>
## Inizio
![](./screenshots/00_start.jpg)
</section>
<section data-markdown>
## Preparazione
![](./screenshots/01_update_3parti.jpg)
</section>
<section data-markdown>
## Tastiera
![](./screenshots/06_tastiera.jpg)
</section>
<section data-markdown>
## Timezone
![](./screenshots/07_timezone.jpg)
</section>
</section>
<section>
<section data-markdown>
# Cifratura disco
cosa è
a cosa serve
<!--
quando funziona? quando è spento
quando non funziona? quando è acceso
se si lascia il computer incostudito spegnerlo
se è per poco tempo mettere lo screensaver con password)
-->
</section>
<section data-markdown>
## Cifratura
![](./screenshots/02_scegliere_cifratura.jpg)
</section>
</section>
<section>
<section data-markdown>
# Passphrase
cos'è una passphrase buona?
a cosa serve questa passphrase?
</section>
<section data-markdown>
## Passphrase
![](./img/passwd.png)
</section>
</section>
<section>
<section data-markdown>
## Chiave di sicurezza
![](./screenshots/03_passphrase_discreta.jpg)
</section>
<section data-markdown>
## Chiave di sicurezza
![](./screenshots/04_passphrase_buona.jpg)
</section>
<section data-markdown>
## Partizionamento
![](./screenshots/05_partizionamento.jpg)
</section>
</section>
<section>
<section data-markdown>
# Utente e password
* perchè si crea l'utente?
* cos'è una password buona?
* a cosa serve questa password?
** non usare le stesse password **
*(se il pc è acceso e lasciato incustodito...)*
</section>
<section data-markdown>
## Utente e Password
![](./screenshots/08_user_pwfragile.jpg)
</section>
</section>
<section data-markdown>
# Blocco schermo
## ScreenSaver
Ctrl+L
</section>
<section>
<section data-markdown>
# Fine installazione
# Primo avvio
</section>
<section data-markdown>
## Completamento
![](./screenshots/09_waiting.jpg)
</section>
<section data-markdown>
## Fine
![](./screenshots/10_end.jpg)
</section>
<section data-markdown>
## Passphrase
![](./screenshots/11_ask_passphrase.jpg)
</section>
<section data-markdown>
## Login
![](./screenshots/12_login.jpg)
</section>
<section data-markdown>
## Menu
![](./screenshots/13_menu.jpg)
</section>
</section>
<section data-markdown>
# PASSWORD
#### Se le password sono:
* lunghissime
* complicate e poco mnemoniche
* sempre diverse
Come facciamo a ricordarci le password? Se le scordo?
</section>
<section>
<section data-markdown>
# Password manager
## Keepassx
Mi permette di salvare le credenziali (user/password) e un po' di informazioni correlate
</section>
<section data-markdown>
# Master password
</section>
<section data-markdown>
# Keepass
* creare più db (con differente master password)
* creare gruppi per migliorare la ricerca
* aggiungere credenziali
* cercare tra le informazioni
* riaprire i db salvati
</section>
<section data-markdown>
## Keypass
![](./screenshots/13_menu_keypassx.jpg)
</section>
<section data-markdown>
## Keypass
![](./screenshots/14_keypassx.jpg)
</section>
<section data-markdown>
## Crea Db
![](./screenshots/15_nuovodb.jpg)
</section>
<section data-markdown>
## Scegli password
![](./screenshots/15_setpw.jpg)
</section>
<section data-markdown>
## Aggiungi credenziali
![](./screenshots/16_addcredenziali.jpg)
</section>
<section data-markdown>
## Aggiungi credenziali
![](./screenshots/16_addcredenziali2.jpg)
</section>
<section data-markdown>
## Lista credenziali
![](./screenshots/19_2credenziali.jpg)
</section>
<section data-markdown>
## Salva Db
![](./screenshots/20_savedb.jpg)
</section>
<section data-markdown>
## Cerca
![](./screenshots/21_search_francia.jpg)
</section>
<section data-markdown>
## Apri
![](./screenshots/22_reopen.jpg)
</section>
</section>
<section data-markdown>
## Cifratura dispositivi USB
Perchè crittare una memoria USB?
Alcune ragioni come quelle sul sistema operativo
Probabilmente contiene foto, documenti o materiale da passare ad un'altra persona
Facile da perdere
</section>
<section>
<section data-markdown>
### gnome-disk-utility
**E' molto semplice**
1. Installa gnome-disk-utility
2. Lo trovi in Tutto -> Dischi
3. Inserisci la chiavetta, comparirà nella lista a sinistra
4. Clicchi sulla chiavetta (accertarsi che sia quella)
5. Scegliere luks + ext4
Una volta creata la chiavetta crittata fare caso al lucchetto chiuso nell'icona
Una volta decrittata fare caso al lucchetto aperto nell'icona
</section>
<section data-markdown>
## Menu
![](./screenshots/23_usbdisk_menu_tutto.jpg)
</section>
<section data-markdown>
## Applicazione
![](./screenshots/24_usbdisk_menu_search_dischi.jpg)
</section>
<section data-markdown>
## Elenco dischi
![](./screenshots/25_usbdisk_diskutility.jpg)
</section>
<section data-markdown>
## Scelgo di cifrare
![](./screenshots/26_usbdisk_scelgo_crittare.jpg)
</section>
<section data-markdown>
## Scelta della chiave
![](./screenshots/27_usbdisk_chiaverobusta.jpg)
</section>
<section data-markdown>
## Inserimento chiave
![](./screenshots/28_usbdisk_creata_chiedepw.jpg)
</section>
<section data-markdown>
## Lucchetto aperto
![](./screenshots/29_usbdisk_decrittata.jpg)
</section>
</section>
<section data-markdown>
### CANCELLAZIONE SICURA
Normalmente quando si cancella un file, il file finisce nel cestino.
Quando si svuota il cestino i file spariscono dal computer ma in realtà sono fisicamente
ancora leggibili dal disco fisso con software fatti apposta per recuperare i dati.
</section>
<section data-markdown>
### Cancellazione Sicura
Esistono dei software fatti apposta per eliminare i dati che al posto di cancellarli ci
scrivono sopra più volte e solo alla fine eliminano il file.
E' una operazione costosa per il disco e anche in termini di tempo. Più il file è grosso
più tempo ci vuole.
</section>
<section data-markdown>
## Wipe
programmi: wipe -f -c -q -r %F
-f forza la cancellazione
-c chiede il permesso se ne ha bisogno
-q non emette output
-r va in ricorsione se è una directory
%F passa tutta i files e le directory selezionate
come si usano: https://askubuntu.com/questions/57572/how-to-delete-files-in-secure-manner
</section>
<section>
<section data-markdown>
### Modalità d'uso
- installo wipe
- apro la cartella home(casa) che trovo sul desktop
- vado in alto nel menù Modifica -> Imposta Azioni Personalizzate
- premo sul + per aggiungere un azione
- imposto l'azione
- salvo ed esco
- selezione il/i file(s) e clicco con il destro
- ora nel menù esce "Cancellazione Sicura"
</section>
<section data-markdown>
## Imposta azione personalizzata
![](./screenshots/30_wipe_azionepers.jpg)
</section>
<section data-markdown>
## Aggiungo azione
![](./screenshots/31_wipe_aggiungoazione.jpg)
</section>
<section data-markdown>
## Aggiungo azione
![](./screenshots/32_wipe_settandoazione1.jpg)
</section>
<section data-markdown>
## Quali file
![](./screenshots/33_wipe_settandoazione2.jpg)
</section>
<section data-markdown>
## Tasto destro
![](./screenshots/34_wipe_file_dir.jpg)
</section>
</section>
<section data-markdown>
# METADATI
Cosa sono?
</section>
<section>
<section data-markdown>
Che informazioni si portano con se? (video, immagini, documenti)
</section>
<section data-markdown>
## Immagine
![](./screenshots/35_metadata_brutti.jpg)
</section>
<section data-markdown>
## Pdf
![](./screenshots/36_metadata_brutti2pdf.jpg)
</section>
<section data-markdown>
## Documento testo
![](./screenshots/37_metadata_brutti3doc.jpg)
</section>
</section>
<section>
<section data-markdown>
# mat
* installare mat
* creare una azione personalizzata (vedi sopra)
* mat %F
</section>
<section data-markdown>
## Imposta azione personalizzata
![](./screenshots/38_metadata_azionepers.jpg)
</section>
<section data-markdown>
## Aggiungo azione
![](./screenshots/39_metadata_aggiungoazione.jpg)
</section>
<section data-markdown>
## Dettagli azione
![](./screenshots/40_metadata_settandoazione1.jpg)
</section>
<section data-markdown>
## Quali file
![](./screenshots/42_metadata_settandoazione2.jpg)
</section>
</section>
<section data-markdown>
# Per smartphone
[obscurecam](https://play.google.com/store/apps/details?id=org.witness.sscphase1&hl=it)
camv (link)
</section>
<section data-markdown>
# Navigazione in Internet
Autodifesa digitale parte 2
Oggi alle 16:00
</section>
<section data-markdown>
# grazie
</section>
<!--
<section data-markdown>
NAVIGAZIONE DI TUTTI I GIORNI
(NON HO SLIDE)
- https(menarla, perchè usano password wifi deboli..
mostrare che può essere vettore di attacco?)
- disconnect, ublock per diminuire la profilazione(att.ne a volte,
alcuni siti non funzionano)
- noscript
- cookie?
- salvare le password nel browser?
- navigazione incognito(disambiguare) navigazione anonima intallare tor browser prossimo talk
</section>
-->
</div>
</div>
<script src="lib/js/head.min.js"></script>
<script src="js/reveal.js"></script>
<script>
// More info about config & dependencies:
// - https://github.com/hakimel/reveal.js#configuration
// - https://github.com/hakimel/reveal.js#dependencies
Reveal.initialize({
dependencies: [
{ src: 'plugin/markdown/marked.js' },
{ src: 'plugin/markdown/markdown.js' },
{ src: 'plugin/notes/notes.js', async: true },
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
</body>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Autodifesa Digitale I</title>
<link rel="stylesheet" href="css/reveal.css">
<link rel="stylesheet" href="css/theme/black.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="lib/css/zenburn.css">
<!-- User style -->
<style>
.red { color: #ff2c2d; }
.green { color: #17ff2e; }
.blue { color: #1b91ff; }
.slides section { text-align: right; }
.top-right { top: -200px; }
.reveal section img { max-height: 400px; }
</style>
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
</head>
<body>
<div class="reveal">
<div class="slides">
<section>
<section
data-separator="^--$"
data-markdown="slides/intro.md"></section>
</section>
<section>
<section
data-separator="^--$"
data-markdown="slides/liberta.md"></section>
</section>
<section>
<section
data-separator="^--$"
data-markdown="slides/password.md">
</section>
<section id='passwordTest'>
<p>Vediamo quanto sei bravo/a ad inventare una password:</p>
<input type="password"
v-model='password'
@input='checkStrength'
:class="['score' + estimationScore]"/>
<button :disabled="estimationScore!==4"></button>
<p v-if='password.length>2'>
Questa password è {{score[estimationScore]}}, dopo un sequestro uno bravo
ci mette più o meno <b>{{slowCrackTime}}</b> a scoprirla,
la CIA circa <b>{{fastCrackTime}}</b>:
</p>
<li v-for="s in sequence">
<span v-if="s.pattern=='bruteforce'"> {{s.token}} forza bruta</span>
<span v-else-if="s.pattern=='dictionary'">
{{s.token}} dizionario: {{s.dictionary_name}}
{{s.reversed?'(invertita ' + s.matched_word + ')':''}}
{{s.l33t?'(con sostituzione ' + s.sub_display +')':''}}
{{s.uppercase_variations>1?'(con maiuscola)':''}}
</span>
<span v-else-if="s.pattern=='sequence'"> {{s.token}} sequenze: ({{s.sequence_name}})</span>
<span v-else-if="s.pattern=='spatial'"> {{s.token}} sequenze spaziali: ({{s.graph}})</span>
<span v-else-if="s.pattern=='repeat'"> {{s.token}} ripetizione: ({{s.base_token}})</span>
<span v-else-if="s.pattern=='date'"> {{s.token}} data {{s.day}}/{{s.month}}/{{s.year}}</span>
<span v-else-if="s.pattern=='regex'"> {{s.token}} pattern {{s.regex_name}}</span>
<span v-else> {{s}}</span>
<script src='js/moment.js'></script>
<script src='js/vue.min.js'></script>
<script src='js/zxcvbn.js'></script>
<script src='js/password.js'></script>
</section>
</section>
<section>
<section
data-separator="^--$"
data-markdown="slides/dati.md"></section>
</section>
<section>
<section
data-separator="^--$"
data-markdown="slides/navigare.md"></section>
</section>
<section>
<section
data-separator="^--$"
data-markdown="slides/metadata.md"></section>
</section>
<section>
<section
data-separator="^--$"
data-markdown="slides/smartphone.md"></section>
</section>
<section>
<section
data-separator="^--$"
data-markdown="slides/comunicare.md"></section>
</section>
<section>
<section
data-separator="^--$"
data-markdown="slides/anonimato.md"></section>
</section>
<section>
<section
data-separator="^--$"
data-markdown="slides/strumenti-radicali.md"></section>
</section>
</div>
</div>
<script src="lib/js/head.min.js"></script>
<script src="js/reveal.js"></script>
<script>
// More info about config & dependencies:
// - https://github.com/hakimel/reveal.js#configuration
// - https://github.com/hakimel/reveal.js#dependencies
Reveal.initialize({
width: 1300,
height: 600,
minScale: 0.1,
history: true,
progress: true,
controls: true,
maxScale: 3,
center: false,
defaultTiming: 120,
slideNumber: 'c/t',
dependencies: [
{ src: 'plugin/markdown/marked.js' },
{ src: 'plugin/markdown/markdown.js' },
{ src: 'plugin/notes/notes.js', async: true },
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
</body>
</html>

1
js/moment.js Normal file

File diff suppressed because one or more lines are too long

22
js/password.js Normal file
View file

@ -0,0 +1,22 @@
moment.locale('it');
var app = new Vue({
el: '#passwordTest',
data: {
password: '',
estimationScore: 0,
score: ['inutile', 'pessima', 'brutta', 'così così', 'buona'],
scoreColor: 'red',
slowCrackTime: '',
fastCrackTime: '',
sequence: [],
},
methods: {
checkStrength (e) {
var estimation = zxcvbn(this.password, ['diocane', 'dioporco', 'porcodio', 'madonnacane'])
this.estimationScore = estimation.score;
this.slowCrackTime = moment.duration(estimation.crack_times_seconds.offline_slow_hashing_1e4_per_second, 'seconds').humanize();
this.fastCrackTime = moment.duration(estimation.crack_times_seconds.offline_fast_hashing_1e10_per_second, 'seconds').humanize();
this.sequence = estimation.sequence;
},
}
})

View file

@ -1,6 +1,6 @@
/*!
* reveal.js
* http://lab.hakim.se/reveal-js
* http://revealjs.com
* MIT licensed
*
* Copyright (C) 2017 Hakim El Hattab, http://hakim.se
@ -26,7 +26,7 @@
var Reveal;
// The reveal.js version
var VERSION = '3.5.0';
var VERSION = '3.6.0';
var SLIDES_SELECTOR = '.slides section',
HORIZONTAL_SLIDES_SELECTOR = '.slides>section',
@ -49,9 +49,20 @@
minScale: 0.2,
maxScale: 2.0,
// Display controls in the bottom right corner
// Display presentation control arrows
controls: true,
// Help the user learn the controls by providing hints, for example by
// bouncing the down arrow when they first encounter a vertical slide
controlsTutorial: true,
// Determines where controls appear, "edges" or "bottom-right"
controlsLayout: 'bottom-right',
// Visibility rule for backwards navigation arrows; "faded", "hidden"
// or "visible"
controlsBackArrows: 'faded',
// Display a presentation progress bar
progress: true,
@ -106,14 +117,16 @@
showNotes: false,
// Global override for autolaying embedded media (video/audio/iframe)
// - null: Media will only autoplay if data-autoplay is present
// - true: All media will autoplay, regardless of individual setting
// - false: No media will autoplay, regardless of individual setting
// - null: Media will only autoplay if data-autoplay is present
// - true: All media will autoplay, regardless of individual setting
// - false: No media will autoplay, regardless of individual setting
autoPlayMedia: null,
// Number of milliseconds between automatically proceeding to the
// next slide, disabled when set to 0, this value can be overwritten
// by using a data-autoslide attribute on your slides
// Controls automatic progression to the next slide
// - 0: Auto-sliding only happens if the data-autoslide HTML attribute
// is present on the current slide or fragment
// - 1+: All slides will progress automatically at the given interval
// - false: No auto-sliding, even if data-autoslide is present
autoSlide: 0,
// Stop auto-sliding after user input
@ -132,6 +145,8 @@
hideAddressBar: true,
// Opens links in an iframe preview overlay
// Add `data-preview-link` and `data-preview-link="false"` to customise each link
// individually
previewLinks: false,
// Exposes the reveal.js API through window.postMessage
@ -207,6 +222,10 @@
previousBackground,
// Remember which directions that the user has navigated towards
hasNavigatedRight = false,
hasNavigatedDown = false,
// Slides may hold a data-state attribute which we pick up and apply
// as a class to the body. This list contains the combined state of
// all current slides.
@ -444,6 +463,8 @@
*/
function start() {
loaded = true;
// Make sure we've got all the DOM elements we need
setupDOM();
@ -471,8 +492,6 @@
// Enable transitions now that we're loaded
dom.slides.classList.remove( 'no-transition' );
loaded = true;
dom.wrapper.classList.add( 'ready' );
dispatchEvent( 'ready', {
@ -508,6 +527,20 @@
// Prevent transitions while we're loading
dom.slides.classList.add( 'no-transition' );
if( isMobileDevice ) {
dom.wrapper.classList.add( 'no-hover' );
}
else {
dom.wrapper.classList.remove( 'no-hover' );
}
if( /iphone/gi.test( UA ) ) {
dom.wrapper.classList.add( 'ua-iphone' );
}
else {
dom.wrapper.classList.remove( 'ua-iphone' );
}
// Background element
dom.background = createSingletonNode( dom.wrapper, 'div', 'backgrounds', null );
@ -516,11 +549,11 @@
dom.progressbar = dom.progress.querySelector( 'span' );
// Arrow controls
createSingletonNode( dom.wrapper, 'aside', 'controls',
'<button class="navigate-left" aria-label="previous slide"></button>' +
'<button class="navigate-right" aria-label="next slide"></button>' +
'<button class="navigate-up" aria-label="above slide"></button>' +
'<button class="navigate-down" aria-label="below slide"></button>' );
dom.controls = createSingletonNode( dom.wrapper, 'aside', 'controls',
'<button class="navigate-left" aria-label="previous slide"><div class="controls-arrow"></div></button>' +
'<button class="navigate-right" aria-label="next slide"><div class="controls-arrow"></div></button>' +
'<button class="navigate-up" aria-label="above slide"><div class="controls-arrow"></div></button>' +
'<button class="navigate-down" aria-label="below slide"><div class="controls-arrow"></div></button>' );
// Slide number
dom.slideNumber = createSingletonNode( dom.wrapper, 'div', 'slide-number', '' );
@ -533,9 +566,6 @@
// Overlay graphic which is displayed during the paused mode
createSingletonNode( dom.wrapper, 'div', 'pause-overlay', null );
// Cache references to elements
dom.controls = document.querySelector( '.reveal .controls' );
dom.wrapper.setAttribute( 'role', 'application' );
// There can be multiple instances of controls throughout the page
@ -546,6 +576,10 @@
dom.controlsPrev = toArray( document.querySelectorAll( '.navigate-prev' ) );
dom.controlsNext = toArray( document.querySelectorAll( '.navigate-next' ) );
// The right and down arrows in the standard reveal.js controls
dom.controlsRightArrow = dom.controls.querySelector( '.navigate-right' );
dom.controlsDownArrow = dom.controls.querySelector( '.navigate-down' );
dom.statusDiv = createStatusDiv();
}
@ -789,7 +823,7 @@
// If no node was found, create it now
var node = document.createElement( tagname );
node.classList.add( classname );
node.className = classname;
if( typeof innerHTML === 'string' ) {
node.innerHTML = innerHTML;
}
@ -982,14 +1016,22 @@
*/
function configure( options ) {
var numberOfSlides = dom.wrapper.querySelectorAll( SLIDES_SELECTOR ).length;
dom.wrapper.classList.remove( config.transition );
var oldTransition = config.transition;
// New config options may be passed when this method
// is invoked through the API after initialization
if( typeof options === 'object' ) extend( config, options );
// Abort if reveal.js hasn't finished loading, config
// changes will be applied automatically once loading
// finishes
if( loaded === false ) return;
var numberOfSlides = dom.wrapper.querySelectorAll( SLIDES_SELECTOR ).length;
// Remove the previously configured transition class
dom.wrapper.classList.remove( oldTransition );
// Force linear transition based on browser capabilities
if( features.transforms3d === false ) config.transition = 'linear';
@ -1001,6 +1043,9 @@
dom.controls.style.display = config.controls ? 'block' : 'none';
dom.progress.style.display = config.progress ? 'block' : 'none';
dom.controls.setAttribute( 'data-controls-layout', config.controlsLayout );
dom.controls.setAttribute( 'data-controls-back-arrows', config.controlsBackArrows );
if( config.shuffle ) {
shuffle();
}
@ -1025,12 +1070,8 @@
}
if( config.showNotes ) {
dom.speakerNotes.classList.add( 'visible' );
dom.speakerNotes.setAttribute( 'data-layout', typeof config.showNotes === 'string' ? config.showNotes : 'inline' );
}
else {
dom.speakerNotes.classList.remove( 'visible' );
}
if( config.mouseWheel ) {
document.addEventListener( 'DOMMouseScroll', onDocumentMouseScroll, false ); // FF
@ -1235,6 +1276,8 @@
a[ i ] = b[ i ];
}
return a;
}
/**
@ -1261,7 +1304,7 @@
if( value === 'null' ) return null;
else if( value === 'true' ) return true;
else if( value === 'false' ) return false;
else if( value.match( /^[\d\.]+$/ ) ) return parseFloat( value );
else if( value.match( /^-?[\d\.]+$/ ) ) return parseFloat( value );
}
return value;
@ -1791,7 +1834,7 @@
else {
dom.slides.style.zoom = '';
dom.slides.style.left = '50%';
dom.slides.style.top = '50%';
dom.slides.style.top = '40%';
dom.slides.style.bottom = 'auto';
dom.slides.style.right = 'auto';
transformSlides( { layout: 'translate(-50%, -50%) scale('+ scale +')' } );
@ -2463,13 +2506,14 @@
updateSlideNumber();
updateSlidesVisibility();
updateBackground( true );
updateNotesVisibility();
updateNotes();
formatEmbeddedContent();
// Start or stop embedded content depending on global config
if( config.autoPlayMedia === false ) {
stopEmbeddedContent( currentSlide );
stopEmbeddedContent( currentSlide, { unloadIframes: false } );
}
else {
startEmbeddedContent( currentSlide );
@ -2706,10 +2750,10 @@
// Show the horizontal slide if it's within the view distance
if( distanceX < viewDistance ) {
showSlide( horizontalSlide );
loadSlide( horizontalSlide );
}
else {
hideSlide( horizontalSlide );
unloadSlide( horizontalSlide );
}
if( verticalSlidesLength ) {
@ -2722,16 +2766,32 @@
distanceY = x === ( indexh || 0 ) ? Math.abs( ( indexv || 0 ) - y ) : Math.abs( y - oy );
if( distanceX + distanceY < viewDistance ) {
showSlide( verticalSlide );
loadSlide( verticalSlide );
}
else {
hideSlide( verticalSlide );
unloadSlide( verticalSlide );
}
}
}
}
// Flag if there are ANY vertical slides, anywhere in the deck
if( dom.wrapper.querySelectorAll( '.slides>section>section' ).length ) {
dom.wrapper.classList.add( 'has-vertical-slides' );
}
else {
dom.wrapper.classList.remove( 'has-vertical-slides' );
}
// Flag if there are ANY horizontal slides, anywhere in the deck
if( dom.wrapper.querySelectorAll( '.slides>section' ).length > 1 ) {
dom.wrapper.classList.add( 'has-horizontal-slides' );
}
else {
dom.wrapper.classList.remove( 'has-horizontal-slides' );
}
}
}
@ -2746,12 +2806,39 @@
if( config.showNotes && dom.speakerNotes && currentSlide && !isPrintingPDF() ) {
dom.speakerNotes.innerHTML = getSlideNotes() || '';
dom.speakerNotes.innerHTML = getSlideNotes() || '<span class="notes-placeholder">No notes on this slide.</span>';
}
}
/**
* Updates the visibility of the speaker notes sidebar that
* is used to share annotated slides. The notes sidebar is
* only visible if showNotes is true and there are notes on
* one or more slides in the deck.
*/
function updateNotesVisibility() {
if( config.showNotes && hasNotes() ) {
dom.wrapper.classList.add( 'show-notes' );
}
else {
dom.wrapper.classList.remove( 'show-notes' );
}
}
/**
* Checks if there are speaker notes for ANY slide in the
* presentation.
*/
function hasNotes() {
return dom.slides.querySelectorAll( '[data-notes], aside.notes' ).length > 0;
}
/**
* Updates the progress bar to reflect the current slide.
*/
@ -2882,6 +2969,26 @@
}
if( config.controlsTutorial ) {
// Highlight control arrows with an animation to ensure
// that the viewer knows how to navigate
if( !hasNavigatedDown && routes.down ) {
dom.controlsDownArrow.classList.add( 'highlight' );
}
else {
dom.controlsDownArrow.classList.remove( 'highlight' );
if( !hasNavigatedRight && routes.right && indexv === 0 ) {
dom.controlsRightArrow.classList.add( 'highlight' );
}
else {
dom.controlsRightArrow.classList.remove( 'highlight' );
}
}
}
}
/**
@ -3061,14 +3168,9 @@
*
* @param {HTMLElement} slide Slide to show
*/
/**
* Called when the given slide is within the configured view
* distance. Shows the slide element and loads any content
* that is set to load lazily (data-src).
*
* @param {HTMLElement} slide Slide to show
*/
function showSlide( slide ) {
function loadSlide( slide, options ) {
options = options || {};
// Show the slide element
slide.style.display = config.display;
@ -3076,6 +3178,7 @@
// Media elements with data-src attributes
toArray( slide.querySelectorAll( 'img[data-src], video[data-src], audio[data-src]' ) ).forEach( function( element ) {
element.setAttribute( 'src', element.getAttribute( 'data-src' ) );
element.setAttribute( 'data-lazy-loaded', '' );
element.removeAttribute( 'data-src' );
} );
@ -3086,6 +3189,7 @@
toArray( media.querySelectorAll( 'source[data-src]' ) ).forEach( function( source ) {
source.setAttribute( 'src', source.getAttribute( 'data-src' ) );
source.removeAttribute( 'data-src' );
source.setAttribute( 'data-lazy-loaded', '' );
sources += 1;
} );
@ -3146,7 +3250,7 @@
background.appendChild( video );
}
// Iframes
else if( backgroundIframe ) {
else if( backgroundIframe && options.excludeIframes !== true ) {
var iframe = document.createElement( 'iframe' );
iframe.setAttribute( 'allowfullscreen', '' );
iframe.setAttribute( 'mozallowfullscreen', '' );
@ -3175,12 +3279,12 @@
}
/**
* Called when the given slide is moved outside of the
* configured view distance.
* Unloads and hides the given slide. This is called when the
* slide is moved outside of the configured view distance.
*
* @param {HTMLElement} slide
*/
function hideSlide( slide ) {
function unloadSlide( slide ) {
// Hide the slide element
slide.style.display = 'none';
@ -3192,6 +3296,18 @@
background.style.display = 'none';
}
// Reset lazy-loaded media elements with src attributes
toArray( slide.querySelectorAll( 'video[data-lazy-loaded][src], audio[data-lazy-loaded][src]' ) ).forEach( function( element ) {
element.setAttribute( 'data-src', element.getAttribute( 'src' ) );
element.removeAttribute( 'src' );
} );
// Reset lazy-loaded media elements with <source> children
toArray( slide.querySelectorAll( 'video[data-lazy-loaded] source[src], audio source[src]' ) ).forEach( function( source ) {
source.setAttribute( 'data-src', source.getAttribute( 'src' ) );
source.removeAttribute( 'src' );
} );
}
/**
@ -3267,6 +3383,13 @@
_appendParamToIframeSource( 'src', 'player.vimeo.com/', 'api=1' );
_appendParamToIframeSource( 'data-src', 'player.vimeo.com/', 'api=1' );
// Always show media controls on mobile devices
if( isMobileDevice ) {
toArray( dom.slides.querySelectorAll( 'video, audio' ) ).forEach( function( el ) {
el.controls = true;
} );
}
}
/**
@ -3411,7 +3534,12 @@
*
* @param {HTMLElement} element
*/
function stopEmbeddedContent( element ) {
function stopEmbeddedContent( element, options ) {
options = extend( {
// Defaults
unloadIframes: true
}, options || {} );
if( element && element.parentNode ) {
// HTML5 media elements
@ -3442,13 +3570,15 @@
}
});
// Lazy loading iframes
toArray( element.querySelectorAll( 'iframe[data-src]' ) ).forEach( function( el ) {
// Only removing the src doesn't actually unload the frame
// in all browsers (Firefox) so we set it to blank first
el.setAttribute( 'src', 'about:blank' );
el.removeAttribute( 'src' );
} );
if( options.unloadIframes === true ) {
// Unload lazy-loaded iframes
toArray( element.querySelectorAll( 'iframe[data-src]' ) ).forEach( function( el ) {
// Only removing the src doesn't actually unload the frame
// in all browsers (Firefox) so we set it to blank first
el.setAttribute( 'src', 'about:blank' );
el.removeAttribute( 'src' );
} );
}
}
}
@ -3736,25 +3866,12 @@
*/
function getSlideBackground( x, y ) {
// When printing to PDF the slide backgrounds are nested
// inside of the slides
if( isPrintingPDF() ) {
var slide = getSlide( x, y );
if( slide ) {
return slide.slideBackgroundElement;
}
return undefined;
var slide = getSlide( x, y );
if( slide ) {
return slide.slideBackgroundElement;
}
var horizontalBackground = dom.wrapper.querySelectorAll( '.backgrounds>.slide-background' )[ x ];
var verticalBackgrounds = horizontalBackground && horizontalBackground.querySelectorAll( '.slide-background' );
if( verticalBackgrounds && verticalBackgrounds.length && typeof y === 'number' ) {
return verticalBackgrounds ? verticalBackgrounds[ y ] : undefined;
}
return horizontalBackground;
return undefined;
}
@ -4016,7 +4133,7 @@
cancelAutoSlide();
if( currentSlide ) {
if( currentSlide && config.autoSlide !== false ) {
var fragment = currentSlide.querySelector( '.current-fragment' );
@ -4134,6 +4251,8 @@
function navigateRight() {
hasNavigatedRight = true;
// Reverse for RTL
if( config.rtl ) {
if( ( isOverview() || previousFragment() === false ) && availableRoutes().right ) {
@ -4158,6 +4277,8 @@
function navigateDown() {
hasNavigatedDown = true;
// Prioritize revealing fragments
if( ( isOverview() || nextFragment() === false ) && availableRoutes().down ) {
slide( indexh, indexv + 1 );
@ -4204,6 +4325,9 @@
*/
function navigateNext() {
hasNavigatedRight = true;
hasNavigatedDown = true;
// Prioritize revealing fragments
if( nextFragment() === false ) {
if( availableRoutes().down ) {
@ -4872,7 +4996,7 @@
this.context.beginPath();
this.context.arc( x, y, radius, 0, Math.PI * 2, false );
this.context.lineWidth = this.thickness;
this.context.strokeStyle = '#666';
this.context.strokeStyle = 'rgba( 255, 255, 255, 0.2 )';
this.context.stroke();
if( this.playing ) {
@ -4988,6 +5112,11 @@
isOverview: isOverview,
isPaused: isPaused,
isAutoSliding: isAutoSliding,
isSpeakerNotes: isSpeakerNotes,
// Slide preloading
loadSlide: loadSlide,
unloadSlide: unloadSlide,
// Adds or removes all internal event listeners (such as keyboard)
addEventListeners: addEventListeners,

6
js/vue.min.js vendored Normal file

File diff suppressed because one or more lines are too long

31
js/zxcvbn.js Normal file

File diff suppressed because one or more lines are too long

View file

@ -78,3 +78,14 @@ based on dark.css by Ivan Sagalaev
.hljs-strong {
font-weight: bold;
}
input, button {
font-size: 100%;
margin: 0px;
border: 0px;
}
button {
margin-left: -10px;
}

File diff suppressed because it is too large Load diff

5498
package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,8 @@
{
"name": "reveal.js",
"version": "3.5.0",
"version": "3.6.0",
"description": "The HTML Presentation Framework",
"homepage": "http://lab.hakim.se/reveal-js",
"homepage": "http://revealjs.com",
"subdomain": "revealjs",
"main": "js/reveal.js",
"scripts": {
@ -23,22 +23,21 @@
"node": ">=4.0.0"
},
"devDependencies": {
"express": "~4.14.0",
"grunt": "~1.0.1",
"grunt-autoprefixer": "~3.0.3",
"grunt-cli": "~1.2.0",
"grunt-contrib-connect": "~0.11.2",
"grunt-contrib-cssmin": "~0.14.0",
"grunt-contrib-jshint": "~0.11.3",
"express": "^4.15.2",
"grunt": "^1.0.1",
"grunt-autoprefixer": "^3.0.4",
"grunt-cli": "^1.2.0",
"grunt-contrib-connect": "^1.0.2",
"grunt-contrib-cssmin": "^2.1.0",
"grunt-contrib-jshint": "^1.1.0",
"grunt-contrib-qunit": "~1.2.0",
"grunt-contrib-uglify": "~0.9.2",
"grunt-contrib-watch": "~1.0.0",
"grunt-sass": "~1.2.0",
"grunt-retire": "~0.3.10",
"grunt-contrib-uglify": "^2.3.0",
"grunt-contrib-watch": "^1.0.0",
"grunt-sass": "^2.0.0",
"grunt-retire": "^1.0.7",
"grunt-zip": "~0.17.1",
"mustache": "~2.2.1",
"node-sass": "~3.13.0",
"socket.io": "^1.4.8"
"mustache": "^2.3.0",
"socket.io": "^1.7.3"
},
"license": "MIT"
}

File diff suppressed because one or more lines are too long

View file

@ -99,6 +99,13 @@
</script>
</section>
<!-- Images -->
<section data-markdown>
<script type="text/template">
![Sample image](https://s3.amazonaws.com/static.slid.es/logo/v2/slides-symbol-512x512.png)
</script>
</section>
</div>
</div>

View file

@ -29,3 +29,8 @@ Content 3.1
## External 3.2
Content 3.2
## External 3.3
![External Image](https://s3.amazonaws.com/static.slid.es/logo/v2/slides-symbol-512x512.png)

View file

@ -18,7 +18,7 @@
}( this, function( marked ) {
var DEFAULT_SLIDE_SEPARATOR = '^\r?\n---\r?\n$',
DEFAULT_NOTES_SEPARATOR = 'note:',
DEFAULT_NOTES_SEPARATOR = 'notes?:',
DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR = '\\\.element\\\s*?(.+?)$',
DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR = '\\\.slide:\\\s*?(\\\S.+?)$';

View file

@ -19,6 +19,9 @@
};
// post once the page is loaded, so the client follows also on "open URL".
window.addEventListener( 'load', post );
// Monitor events that trigger a change in state
Reveal.addEventListener( 'slidechanged', post );
Reveal.addEventListener( 'fragmentshown', post );
@ -28,4 +31,4 @@
Reveal.addEventListener( 'paused', post );
Reveal.addEventListener( 'resumed', post );
}());
}());

View file

@ -2,7 +2,7 @@
"name": "reveal-js-multiplex",
"version": "1.0.0",
"description": "reveal.js multiplex server",
"homepage": "http://lab.hakim.se/reveal-js",
"homepage": "http://revealjs.com",
"scripts": {
"start": "node index.js"
},

View file

@ -675,7 +675,7 @@
document.body.setAttribute( 'data-speaker-layout', value );
// Persist locally
if( window.localStorage ) {
if( supportsLocalStorage() ) {
window.localStorage.setItem( 'reveal-speaker-layout', value );
}
@ -687,7 +687,7 @@
*/
function getLayout() {
if( window.localStorage ) {
if( supportsLocalStorage() ) {
var layout = window.localStorage.getItem( 'reveal-speaker-layout' );
if( layout ) {
return layout;
@ -701,6 +701,19 @@
}
function supportsLocalStorage() {
try {
localStorage.setItem('test', 'test');
localStorage.removeItem('test');
return true;
}
catch( e ) {
return false;
}
}
function zeroPadInteger( num ) {
var str = '00' + parseInt( num );

View file

@ -2,7 +2,7 @@
* phantomjs script for printing presentations to PDF.
*
* Example:
* phantomjs print-pdf.js "http://lab.hakim.se/reveal-js?print-pdf" reveal-demo.pdf
* phantomjs print-pdf.js "http://revealjs.com?print-pdf" reveal-demo.pdf
*
* @author Manuel Bieh (https://github.com/manuelbieh)
* @author Hakim El Hattab (https://github.com/hakimel)

View file

@ -21,7 +21,7 @@ function Hilitor(id, tag)
var targetNode = document.getElementById(id) || document.body;
var hiliteTag = tag || "EM";
var skipTags = new RegExp("^(?:" + hiliteTag + "|SCRIPT|FORM|SPAN)$");
var skipTags = new RegExp("^(?:" + hiliteTag + "|SCRIPT|FORM)$");
var colors = ["#ff6", "#a0ffff", "#9f9", "#f99", "#f6f"];
var wordColor = [];
var colorIdx = 0;
@ -53,11 +53,11 @@ function Hilitor(id, tag)
if(node.nodeType == 3) { // NODE_TEXT
if((nv = node.nodeValue) && (regs = matchRegex.exec(nv))) {
//find the slide's section element and save it in our list of matching slides
var secnode = node.parentNode;
while (secnode.nodeName != 'SECTION') {
var secnode = node;
while (secnode != null && secnode.nodeName != 'SECTION') {
secnode = secnode.parentNode;
}
var slideIndex = Reveal.getIndices(secnode);
var slidelen = matchingSlides.length;
var alreadyAdded = false;
@ -69,7 +69,7 @@ function Hilitor(id, tag)
if (! alreadyAdded) {
matchingSlides.push(slideIndex);
}
if(!wordColor[regs[0].toLowerCase()]) {
wordColor[regs[0].toLowerCase()] = colors[colorIdx++ % colors.length];
}
@ -110,20 +110,26 @@ function Hilitor(id, tag)
function openSearch() {
//ensure the search term input dialog is visible and has focus:
var inputboxdiv = document.getElementById("searchinputdiv");
var inputbox = document.getElementById("searchinput");
inputbox.style.display = "inline";
inputboxdiv.style.display = "inline";
inputbox.focus();
inputbox.select();
}
function closeSearch() {
var inputboxdiv = document.getElementById("searchinputdiv");
inputboxdiv.style.display = "none";
if(myHilitor) myHilitor.remove();
}
function toggleSearch() {
var inputbox = document.getElementById("searchinput");
if (inputbox.style.display !== "inline") {
var inputboxdiv = document.getElementById("searchinputdiv");
if (inputboxdiv.style.display !== "inline") {
openSearch();
}
else {
inputbox.style.display = "none";
myHilitor.remove();
closeSearch();
}
}
@ -132,19 +138,27 @@ function Hilitor(id, tag)
if (searchboxDirty) {
var searchstring = document.getElementById("searchinput").value;
//find the keyword amongst the slides
myHilitor = new Hilitor("slidecontent");
matchedSlides = myHilitor.apply(searchstring);
currentMatchedIndex = 0;
if (searchstring === '') {
if(myHilitor) myHilitor.remove();
matchedSlides = null;
}
else {
//find the keyword amongst the slides
myHilitor = new Hilitor("slidecontent");
matchedSlides = myHilitor.apply(searchstring);
currentMatchedIndex = 0;
}
}
//navigate to the next slide that has the keyword, wrapping to the first if necessary
if (matchedSlides.length && (matchedSlides.length <= currentMatchedIndex)) {
currentMatchedIndex = 0;
}
if (matchedSlides.length > currentMatchedIndex) {
Reveal.slide(matchedSlides[currentMatchedIndex].h, matchedSlides[currentMatchedIndex].v);
currentMatchedIndex++;
if (matchedSlides) {
//navigate to the next slide that has the keyword, wrapping to the first if necessary
if (matchedSlides.length && (matchedSlides.length <= currentMatchedIndex)) {
currentMatchedIndex = 0;
}
if (matchedSlides.length > currentMatchedIndex) {
Reveal.slide(matchedSlides[currentMatchedIndex].h, matchedSlides[currentMatchedIndex].v);
currentMatchedIndex++;
}
}
}
@ -157,7 +171,8 @@ function Hilitor(id, tag)
searchElement.classList.add( 'searchdiv' );
searchElement.style.position = 'absolute';
searchElement.style.top = '10px';
searchElement.style.left = '10px';
searchElement.style.right = '10px';
searchElement.style.zIndex = 10;
//embedded base64 search icon Designed by Sketchdock - http://www.sketchdock.com/:
searchElement.innerHTML = '<span><input type="search" id="searchinput" class="searchinput" style="vertical-align: top;"/><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJiSURBVHjatFZNaxNBGH5md+Mmu92NVdKDRipSAyqCghgQD4L4cRe86UUtAQ+eFCxoa4/25EXBFi8eBE+eRPoDhB6KgiiixdAPCEkx2pjvTXadd9yNsflwuyUDD/O+u8PzzDPvzOwyx3EwyCZhwG3gAkp7MnpjgbopjsltcD4gjuXZZKeAR348MYLYTm3LzOs/y3j3JTfZxgXWXmTuwPHIc4VmoOmv5IrI53+AO2DdHLjkDWQ3GoEEVFXtXQOvkSnPWcyUceviLhwbDYv8/XIVj97kse7TodLvZXxYxrPUHkQ1ufXs3FEdybEIxucySOesoNvUgWU1cP3MkCBfTFdw9fGaAMVmRELq7LBw2Q3/FaAxxWIRpw+ZIr/7IouPqzUBiqmdHAv7EuhRAwf1er2Vy4x1jW3b2d5Jfvu5IPp7l2LYbcgCFFNb+FoJ7oBqEAqFMPNqFcmEgVMJDfMT+1tvN0pNjERlMS6QA5pFOKxiKVPFhakPeL3It+WGJUDxt2wFR+JhzI7v5ctkd8DXOZAkCYYxhO+lKm4+Xfqz/rIixBuNBl7eOYzkQQNzqX249mRl6zUgEcYkaJrGhUwBinVdh6IouPzwE6/DL5w4oLkH8y981aDf+uq6hlKpJESiUdNfDZi7/ehG9K6KfiA3pml0PLcsq+cSMTj2NL9ukc4UOmz7AZ3+crkC4mHujFvXNaMFB3bEr8xPS6p5O+jXxq4VZtaen7/PwzrntjcLUE0iHPS1Ud1cdiEJl/8WivZk0wXd7zWOMkeF8s0CcAmkNrC2nvXZDbbbN73ccYnZoH9bfgswAFzAe9/h3dbKAAAAAElFTkSuQmCC" id="searchbutton" class="searchicon" style="vertical-align: top; margin-top: -1px;"/></span>';
dom.wrapper.appendChild( searchElement );
@ -179,18 +194,13 @@ function Hilitor(id, tag)
}
}, false );
// Open the search when the 's' key is hit (yes, this conflicts with the notes plugin, disabling for now)
/*
document.addEventListener( 'keydown', function( event ) {
// Disregard the event if the target is editable or a
// modifier is present
if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;
if( event.keyCode === 83 ) {
if( event.key == "F" && (event.ctrlKey || event.metaKey) ) {//Control+Shift+f
event.preventDefault();
openSearch();
toggleSearch();
}
}, false );
*/
if( window.Reveal ) Reveal.registerKeyboardShortcut( 'Ctrl-Shift-F', 'Search' );
closeSearch();
return { open: openSearch };
})();

View file

@ -1,40 +1,27 @@
// Custom reveal.js integration
(function(){
var isEnabled = true;
var revealElement = document.querySelector( '.reveal' );
if( revealElement ) {
document.querySelector( '.reveal .slides' ).addEventListener( 'mousedown', function( event ) {
var modifier = ( Reveal.getConfig().zoomKey ? Reveal.getConfig().zoomKey : 'alt' ) + 'Key';
revealElement.addEventListener( 'mousedown', function( event ) {
var defaultModifier = /Linux/.test( window.navigator.platform ) ? 'ctrl' : 'alt';
var zoomPadding = 20;
var revealScale = Reveal.getScale();
var modifier = ( Reveal.getConfig().zoomKey ? Reveal.getConfig().zoomKey : defaultModifier ) + 'Key';
var zoomLevel = ( Reveal.getConfig().zoomLevel ? Reveal.getConfig().zoomLevel : 2 );
if( event[ modifier ] && isEnabled ) {
event.preventDefault();
if( event[ modifier ] && !Reveal.isOverview() ) {
event.preventDefault();
var bounds;
var originalDisplay = event.target.style.display;
// Get the bounding rect of the contents, not the containing box
if( window.getComputedStyle( event.target ).display === 'block' ) {
event.target.style.display = 'inline-block';
bounds = event.target.getBoundingClientRect();
event.target.style.display = originalDisplay;
} else {
bounds = event.target.getBoundingClientRect();
zoom.to({
x: event.clientX,
y: event.clientY,
scale: zoomLevel,
pan: false
});
}
} );
zoom.to({
x: ( bounds.left * revealScale ) - zoomPadding,
y: ( bounds.top * revealScale ) - zoomPadding,
width: ( bounds.width * revealScale ) + ( zoomPadding * 2 ),
height: ( bounds.height * revealScale ) + ( zoomPadding * 2 ),
pan: false
});
}
} );
Reveal.addEventListener( 'overviewshown', function() { isEnabled = false; } );
Reveal.addEventListener( 'overviewhidden', function() { isEnabled = true; } );
}
})();
/*!
@ -283,6 +270,3 @@ var zoom = (function(){
}
})();

122
slides/anonimato.md Normal file
View file

@ -0,0 +1,122 @@
<!-- .slide: data-background="img/anon.jpg" -->
## anonimato
--
## anonimato
Come la sicurezza, non è una proprietà, non si compra, non si installa, ci
devi mettere il cervello. stacce.
Ci sono strumenti, da usare in determinate occasioni, dipende dal vostro
modello di rischio.
--
## chi sono?
L'indirizzo ip è un numero composto da 4 cifre da 0 a 255 che indica il
dispositivo che ci collega ad internet in un momento X (anche il telefono
ne ha uno).
Gli operatori telefonici tengono dei registri delle assegnazioni di questi
indirizzi.
Quando interagisco con un sito (ad esempio invio la foto di un corteo),
quel sito e tutti quelli che sono tra me e il sito, sapranno l'indirizzo ip
del mittente, quindi se quella foto è problematica, verranno a bussarmi
sotto casa.
notes: pippa su ipv6
--
## Tor
Tor è lo "strumento" più famoso per ottenere l'anonimato in rete.
In sostanza un'altra persona si prende l'accollo e la responsabilità delle
tue attività, senza poter sapere chi sei e cosa vuoi (ma perchè lo fa?).
Un'eventuale ascoltatore (attaccante) vedrà che stai interagendo attraverso
la rete Tor, ma non cosa fai e con chi.
Numeri: utenti: più di 2milioni al giorno nodi: 7mila
--
<!-- .slide: data-background="img/tor.png" -->
--
## Tor Browser
Tor Browser è un browser appositamente studiato per funzionare attraverso
la rete Tor in automatico e senza troppo sbattimento.
Si occupa anche di preservare l'anonimato in altri modi.
Su android ci sono Tor Browser e Orbot!
--
## Deanonimizzare
La tua identità non è correlata solamente ad un indirizzo ip.
Se postate un commento dal vostro account facebook con Tor Browser, mi
serve l'ip per capire chi ha scritto quel commento?
--
### Deanonimizzare
Ci sono mille altri modi per deanonimizzare, in sostanza si cerca di creare
un'impronta univoca vostra, attraverso varie tecniche:
- la risoluzione del monitor che state usando
- caratteristiche del browser (lingue supportate, font, sistema operativo,
plugin installati, impostazioni, velocità)
- attacchi basati su tempo/spazio particolari.
- comportamenti particolari ([biometria](https://www.typingdna.com/)
[comportamentale](https://www.keytrac.net/en/tryout))
- aneddoto hardvard
[Tor Browser](https://www.torproject.org/download/download-easy.html.en)
cerca di risolvere la maggior parte di questi attacchi.
--
## VPN
Le VPN sono un modo sicuro di collegare computer su internet.
Vengono utilizzate ad esempio per collegare uffici di una stessa azienda
senza che nessuno possa sbirciare il traffico (il collegamento è cifrato).
--
## VPN
Ci sono VPN che vengono invece usate per offrire protezione agli utenti
facendoli accedere ad internet attraverso di loro
([riseup](https://riseup.net/en/vpn) [protonvpn](https://protonvpn.com/))
- proteggervi dal controllo da parte dei provider (ISP)
- ovviare alla censura di stato
- accedere a servizi vietati nel vostro paese
- bypassare il firewall del vostro ufficio
- rendere più sicuro il vostro traffico su reti Wi-Fi non protette
--
## Tails
[The amnesic incognito live system](https://tails.boum.org/index.it.html)
E' un sistema operativo live, vuole dire che non lo installi ma parte da
una pennetta USB:
- non lascia tracce delle tue scorribande perche' non salva niente.
- usa Tor per tutto.

51
slides/comunicare.md Normal file
View file

@ -0,0 +1,51 @@
<!-- .slide: data-background="img/comunicazione.jpg" -->
## Comunicazione
--
## uno a uno
- mail
- telefonata
- sms
- whatsapp
- telegram
- jabber
- cifrare lecomunicazioni
--
## molti a molti (gruppi)
- whatsapp
- telegram
- facebook
- mailing list
- jabber
- irc
- mastodon
- cifrare le comunicazioni
--
## Ma quindi...
--
## PGP (mail cifrate)
- criptografia forte
- funziona
- è un casino da usare
--
## Signal
- criptografia forte
- come qualsiasi app di messaggistica
- comunicazione real time
- autodistruzione dei messaggi
- si può impostare il pin (fatelo!)

76
slides/dati.md Normal file
View file

@ -0,0 +1,76 @@
<!-- .slide: data-background="img/hd.jpg" -->
### Sicurezza dei dati
--
### Sicurezza dei dati
Puoi perdere/rompere un dispositivo o possono sequestrarlo.
Prima o poi succede...
![think](img/think.jpg)
<!-- .element: class="fragment" -->
--
## Come risolvo?
- con frequenti backup
- cifrando i dati
--
### Backup
- disco locale (ok, ma se nel nostro modello di rischio c'e' un probabile sequestro non funziona)
- remoto (ok, cifrato va bene dove vogliamo, anche su google/dropbox)
dei programmi che ci sentiamo di consigliare sono:
- per linux [Déjà Dup](https://wiki.gnome.org/Apps/DejaDup) che si basa su [duplicity](http://duplicity.nongnu.org/)
- per android consigliamo [adb](https://www.androidworld.it/2018/03/27/backup-android-543009/) agli smanettoni
--
## Cifratura disco
E' facile! Richiede solo l'inserimento di una passphrase all'avvio del computer o di un pin all'avvio del telefono.
Con una [buona passphrase](#/2/11)/pin il contenuto del disco sarà al sicuro per un po'.
--
## Alcune precisazioni
I dati sono in chiaro a computer acceso,
quindi non lasciarlo incustodito (per poco tempo blocca lo schermo per qualsiasi modello di rischio),
un'alternativa e' fare un'altra partizione cifrata da aprire
solo quando lavori con quel materiale sensibile.
notes:
se suonano alla porta, spegni il computer o smonta la partizione cifrata prima di aprire.
--
## Cancellazione sicura dei dati
Per ottimizzare, quando eliminiamo un file, il sistema operativo segna solo
come libero il posto che occupa, non ne sovrascrive il contenuto.
E' possibile recuperarne il contenuto.
Nel caso il disco sia cifrato il pericolo e' minore, anche nel caso
il disco sia un SSD.
Se passate la frontiera o vendete il vostro computer, consideratelo:
esistono vari programmi per eliminare in maniera sicura i file.
--
## Compartimentazione
Ho bisogno di avere tutti i dati su ogni dispositivo?
- mi servono le mail sul telefono?
- ho bisogno delle chat sul computer?
Spesso la miglior tutela dei dati si ottiene non avendoli ;)

101
slides/intro.md Normal file
View file

@ -0,0 +1,101 @@
<!-- .slide: data-background="./img/copertina.png" -->
## Autodifesa<br/>digitale
[underscore_to hacklab](https://autistici.org/underscore)
<footer>
<small>
per presentazioni premi `s` e abilita i popup
premi **ESC** per una panoramica
premi **F11** per fullscreen (must)
per domande scrivici a **underscore [at] autistici.org**
</small>
</footer>
notes:
qui compariranno delle note...
--
## INTRO
Queste slide intendono essere una panoramica concisa di autodifesa digitale.
Rappresentano un'insieme di conoscenze e buone pratiche tratte da varie fonti
ed esperienze.
Sono pensate per essere usufruibili anche da web quindi abbiamo scritto tanto.
--
### Riservatezza, sicurezza, intimità digitali
- Non sono proprietà.
- Non si comprano, non è un programma che installi e bona.
- E' un processo, bisogna provare, sbagliare, imparare, **metterci attenzione**<!-- .element: class="fragment highlight-red" -->, stacce.
- E' un approccio mentale.
- In generale, stai delegando, cerca di farlo il meno possibile e fallo almeno in rapporti di fiducia.
--
### Ma è sicuro?
- La sicurezza non è mai 100%, dobbiamo attuare una politica di riduzione del danno, non abbiamo altro.
- L'illusione della sicurezza è decisamente peggio della consapevolezza di essere vulnerabili.
--
Inoltre comportamenti e strumenti da adottare in alcuni casi,
in altri non vanno bene.
![](./img/pasta-e-forchetta.jpg)
<!-- .element: class="fragment" -->
![](./img/brodino.jpg)
<!-- .element: class="fragment" -->
--
### Modello di rischio
Bisogna che tu capisca il tuo modello di rischio
rispondendo alle seguenti domande:
- **da chi voglio proteggermi?<!-- .element: class="red"-->** (la mamma, il/la compagn*, facebook, il datore di lavoro, la digos, i rettiliani)
<!-- .element: class="fragment" -->
- **cosa voglio proteggere?**<!-- .element: class="red"--> (l'identità, i contatti, le preferenze sessuali, le comunicazioni)
<!-- .element: class="fragment" -->
- **quali sono gli attacchi più probabili?**<!-- .element: class="red"--> (sequestro, intercettazione, leak)
<!-- .element: class="fragment" -->
--
### Esempi
- il tempo cambia sia i rapporti di fiducia (es. un/una ex) ..
- sia i livelli di rischio
- perdiamo il telefono
- sequestro
notes: proporre una riflessione collettiva su uno scenario
---
### E quindi?
Che modello di rischio scegliamo noi?
Siccome e' impossibile difendersi da un attaccante sufficientemente potente,
ma soprattutto, la maggior parte di noi non deve avere a che fare con l'NSA o NSO,
prendiamo come modello di rischio quello che vede un'autorita' locale voler
in qualche modo indagare su di noi.
--
### Dai, ma chi mi caga?
Guardando la spesa statale per le tecnologie di sorveglianza ad uso poliziesco, qualcuno ti considera.
- [quanto spende il ministero dell'interno](https://motherboard.vice.com/it/article/padegg/quanto-spende-il-governo-italiano-per-le-tecnologie-di-sorveglianza)
- [quanto spende il ministero della giustizia](https://www.vice.com/it/article/43ja4q/listino-prezzi-intercettazioni-dispositivi-procura-milano-mercato-malware)
- [statistiche ministero della giustizia](https://archive.org/details/DeterminazioneDeiNuoviPrezziIntercettazioni/page/n3)
- [filiera delle intercettazioni](https://www.ilsole24ore.com/art/notizie/2018-08-03/le-intercettazioni-costano-169-milioni-2017-oltre-127mila-bersagli-190839.shtml)
- [prezzi intercettazioni](https://archive.org/details/DeterminazioneDeiNuoviPrezziIntercettazioni/page/n3)
- [paranoia gratuita](https://motherboard.vice.com/it/article/evv3xp/i-video-che-metti-online-vengono-spiati-dalla-polizia-italiana)
- [aggiornamenti legge italiana uso trojan](https://motherboard.vice.com/it/article/7xedna/la-legge-italiana-sulluso-dei-trojan-e-un-disastro)

69
slides/liberta.md Normal file
View file

@ -0,0 +1,69 @@
<!-- .slide: data-background="img/freedom.jpg" -->
### Free
### Software
--
### Free Software
Per parlare del software libero (free non vuol dire gratuito) ci vorrebbero ore,
ma qui ci interessa solo sottolineare quali sono le principali differenze,
tra i sistemi operativi e le applicazioni dal punto di vista della **sicurezza**<!-- .element: class="fragment highlight-red" -->.
--
### Proprietario? No thanks
I sistemi operativi e le applicazioni proprietarie (es. Windows, MacOS, iOS),
sono sistemi chiusi.
Significa che nessuno puo' conoscerne il contenuto.
Svolgono delle funzioni, ma come lo fanno o se mentre svolgono le loro funzioni facciano anche altre cose noi non lo sappiamo.
--
### Se è Libero ... MEGLIO!
Il software libero, invece è accessibile a tutti.
Di qualsiasi programma o parte del sistema sono disponibili e pubblici,
i sorgenti.
Chiunque abbia la giusta competenza può controllare cosa e come svolgono
le loro funzioni.
--
### Fiducia
La comunità che collabora allo sviluppo del software libero è,
essa stessa garanzia di controllo sui suoi contenuti.
Su una comunità così numerosa si può essere confidenti che eventuali,
problemi siano tempestivamente individuati e segnalati.
--
### Consigli
- Sul computer installate [linux](http://www.linux.it/distro) (facile)
- Se avete un telefono con android potete
installare [LineageOS](https://www.lineageos.org/) (meno facile)
notes:
parlare di fdroid (https://www.reddit.com/r/privacy/comments/3cjj2e/how_secure_is_fdroid/) https://f-droid.org/en/docs/Security_Model/
--
### Alcuni numeri
dal 2005 ad oggi circa 13500 sviluppatori hanno contribuito al solo sviluppo del kernel linux.
- [GitHub](https://github.com): conta quasi 5M di repositories.
- [SourceForge](https://sourceforge.net) ospita 324000 progetti.
- [Ohloh](https://www.openhub.net) ospita 550000 progetti.
- [Queste slides](https://git.lattuga.net/cisti/autodifesa-digitale-parte-1/) sono libere (sono un fork bolognese).
notes:
vlc, android, gnome, arduino, open hardware

100
slides/metadata.md Normal file
View file

@ -0,0 +1,100 @@
<!-- .slide: data-background="img/metadata.jpg" -->
--
## MetaDati
> We kill people based on metadata
Michael Hayden, former CIA and NSA director /
[source](https://www.youtube.com/watch?v=UdQiz0Vavmc#t=27s)
--
## Metadati
Sono dati che descrivono pezzi di informazione tranne l'informazione
stessa. Il contenuto di un messaggio non è il metadato, ma chi l'ha
mandato, a chi, da dove e quando sono tutti esempi di metadati.
--
## Metadati
Ogni informazione digitalizzata si porta dietro dei metadati:
- le comunicazioni (sms/telefonate/chat/WA)
<!-- .element: class="fragment" -->
- immagini/pdf (autore, geolocalizzazione, etc..)
<!-- .element: class="fragment" -->
- email (soggetto, destinatario, ora invio)
<!-- .element: class="fragment" -->
--
## A che servono i contenuti se...
- so che hai chiamato una sex line alle 2.24 e hai parlato per 18 minuti
<!-- .element: class="fragment" -->
- che alle 4 del pomeriggio hai chiamato un numero verde per la prevenzione
suicidi.
<!-- .element: class="fragment" -->
- hai ricevuto una mail da un servizio di check HIV e poi hai chiamato il
tuo medico di base e visitato un forum di sieropositivi nella stessa ora.
<!-- .element: class="fragment" -->
- hai chiamato la tua ginecologa, ci hai parlato per mezz'ora e poi hai
chiamato una clinica privata specializzata in aborti
<!-- .element: class="fragment" -->
--
## E quindi?
In molti sistemi legali solitamente si progettono i contenuti molto meglio
dei metadati, ad esempio in italia le telefonate vengono registrate
solamente in caso di indagini in corso per reati di un certo livello,
mentre gli operatori telefonici sono per legge obbligati a mantenere i
metadati delle telefonate per 24 mesi, i famosi tabulati telefonici.
--
## METADATI vs CONTENUTI
La narrazione riguardo questa distinzione, cioe' il trattamento differente
dei contenuti rispetto a quello dei metadati, descrive i metadati come se
non fossero un grande problema, come se fossero molto meno invasivi della
persona rispetto al contenuto vero e proprio delle comunicazioni. In
realtà è vero il contrario
notes: per quanto riguarda il controllo massivo...
--
## issue
I metadati sono in forma testuale ed e' quindi possibile fare delle
ricerche massive su di essi, indicizzarli, categorizzarli, cosa impossibile
da fare con le comunicazioni vere e proprie.
Avendo i metadati e' possibile cercare tutte le telefonate effettuate verso
un numero, o da un numero, o in un lasso di tempo, o da un luogo
specificato, nessuna di queste ricerche risulta possibile invece avendo
solo il contenuto delle comunicazioni. <!-- .element: class="fragment" -->
--
## Aneddoto
- [mcafee](https://www.npr.org/sections/thetwo-way/2012/12/04/166487197/betrayed-by-metadata-john-mcafee-admits-hes-really-in-guatemala?t=1543618516954)
- [mcafee
2](https://nakedsecurity.sophos.com/2012/12/03/john-mcafee-location-exif/)
--
## Come mi proteggo?
La consapevolezza è già un grande passo avanti. Puoi usare alcuni
strumenti per rimuovere i metadati dai file:
- per android c'è [Scrambled
Exif](https://f-droid.org/en/packages/com.jarsilio.android.scrambledeggsif/)
- su linux c'è [mat](https://0xacab.org/jvoisin/mat2)

87
slides/navigare.md Normal file
View file

@ -0,0 +1,87 @@
<!-- .slide: data-background="img/internet.jpg" -->
## Navigazione nell'Internet
--
Finora non abbiamo parlato dei pericoli della rete, ma solo quelli del
nostro dispositivo, considerandolo disconnesso.
--
### Come ci connettiamo?
- Wifi? Cambiate la password di default.
- [Disabilitate il WPS del
router](https://www.tomshw.it/sistema-wps-router-vulnerabile-meglio-spegnerlo-37486).
- Wifi pubbliche? usare VPN, vedi dopo.
- Dal telefono, disabilitare il wifi quando non lo usate.
- Preferite il cavo di rete quando potete.
notes: i dispositivi wifi broadcastano i MAC ai router se non impostati per
non farlo (esempio metro di londra)
https://tfl.gov.uk/corporate/publications-and-reports/wifi-data-collection
--
## Buone pratiche
- Controlla la barra di navigazione (https? il sito è giusto?)
- Sui link sospetti, controlla prima di cliccarci sopra
- Cambiare motore di ricerca di default (usate
[duckduckgo](https://duckduckgo.com))
- Salvare le password? (meglio di no)
- Usate i Feed/RSS, ad esempio con [Brief](https://addons.mozilla.org/it/firefox/addon/brief/)
- Usate [Tor
Browser](https://www.torproject.org/download/download-easy.html.en)
- Usate profili differenti o containers per non condividere cookie
- Gli allegati delle mail sono un classico vettore di malware, occhio
--
## Ctrl+C... Ctrl+V
### AKA: Attenzione al copia/incolla
Se ti capita di copia-incollare comandi dall'internet al tuo terminale, il consiglio è di farci
un po' di attenzione.
Non sempre quello che si vede è esattamente quello che c'è.
Dietro ad un comando apparententemente innocuo tipo "sudo apt update" si può [nascondere del codice](https://www.bleepingcomputer.com/news/security/dont-copy-paste-commands-from-webpages-you-can-get-hacked/) che può essere anche moooolto dannoso.
Consiglio: prima di incollare un comando nel terminale, incollalo in un qualsiasi editor di testo;
questo ti permetterà di verificare cosa, effettivamente, hai copiato.
--
## Estensioni utili
- [duckduckgo privacy
essentials](https://chrome.google.com/webstore/detail/duckduckgo-privacy-essent/bkdgflcldnnnapblkhphbgpggdiikppg)
- ublock/[adblock plus](https://adblockplus.org/)
- [disconnect](https://addons.mozilla.org/en-US/firefox/addon/disconnect/)
- [facebook
container](https://addons.mozilla.org/en-US/firefox/addon/facebook-container/)
- [decentraleyes](https://addons.mozilla.org/en-US/firefox/addon/decentraleyes/)
- [multi-account
containers](https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers/)
- [adnauseam](https://adnauseam.io/)
--
### Navigazione in incognito
Non c'entra niente con l'anonimato, vi protegge dagli attacchi del vostro
coinquilino che vi guarda la cronologia mentre andate in bagno.
E' una modalità di navigazione che, contrariamente a quanto avviene
normalmente:
- non salva la cronologia
- i file scaricati non vengono mostrati nei download
- niente cache
- non salva i cookie (non sono loggato in sessioni successive)
notes:
https://blog.mozilla.org/security/2010/03/31/plugging-the-css-history-leak/
https://www.ghacks.net/2018/11/04/browser-history-sniffing-is-still-a-thing/
l'attacco permette attivamente a un sito web di provare diverse url e
vedere se sono gia state visitate dal browser di chi lo visita, nell'ordine
di migliaia di url al secondo.

132
slides/password.md Normal file
View file

@ -0,0 +1,132 @@
<!-- .slide:
data-background="https://ak7.picdn.net/shutterstock/videos/25863227/thumb/5.jpg"
--> <br/><br/>
# Password
--
Le password sono la prima barriera di accesso a dati che vogliamo tenere
per noi.
Le usiamo leggere la posta, per ritirare al bancomat (pin), per entrare nel
computer e nei mille servizi digitali a cui accediamo.
--
### Ma... Non siamo bravi a scegliere delle buone password
- <!-- .element: class="fragment" --> E' la password di gmail? <span>
ci mettiamo `gmail` <!-- .element: class="red" --> in mezzo</span> <!--
.element: class="fragment" -->
- <!-- .element: class="fragment" --> Usiamo concetti ricordabili <span>
date di nascita, nomi di amic\*/compagn\*</span> <!-- .element: class="fragment" -->
- <!-- .element: class="fragment" --> Riusiamo la stessa password in
molti posti.
<br/> In pratica scegliamo password facilmente indovinabili. <!--
.element: class="fragment" -->
--
Spinti a migliorare le nostre password
![img/passhint.png](./img/password-requisiti.png)
--
scegliamo le soluzioni piu' semplici e prevedibili
- <!-- .element: class="fragment" --> e' la password di facebook ➜
**facebookpassword**
- <!-- .element: class="fragment" --> inserisci almeno una maiuscola ➜
**Facebookpassword**
- <!-- .element: class="fragment" --> inserisci almeno un numero ➜
**Facebookpassword1**
- <!-- .element: class="fragment" --> inserisci almeno un simbolo ➜
**Facebookpassword1!**
notes: Sono tutti schemi facilmente immaginabili.
--
### Ma soprattutto..
Usiamo la stessa password per più siti/servizi
![scimmia](./img/scimmia.jpg) <!-- .element: class="fragment" --> notes:
chiedere perche' e' un problema....
--
### Orrore!
<!-- .element: class="fragment" --> i dipendenti di ogni servizio hanno
accesso ad ogni altro servizio!
<!-- .element: class="fragment" --> quando (non se) uno dei servizi viene
bucato, gente a caso ha accesso ad ogni vostro servizio (succede un giorno
si e l'altro pure).
<!-- .element: class="fragment" --> E' talmente diffusa la cosa che mozilla
ha un servizio per fare un check ➜
[monitor.firefox.com](https://monitor.firefox.com)
--
### Leak
Negli ultimi anni sono stati bucati tanti servizi e milioni di password
sono diventate pubbliche (leak) permettendo di farci ricerca sopra e si, le
password piu' usate sono `123456` e `password`, gli schemi usati sono
drammaticamente ricorrenti e la maggior parte delle persone riusa le
password in piu' servizi.
Una lista di servizi la cui compromissione è pubblica è
[qui](https://haveibeenpwned.com/PwnedWebsites). Un posto dove poter
studiare le statistiche
--
### Password Cracking
Esistono programmi e servizi che tentano ripetutamente password basandosi
sulla nostra prevedibilità e si basano comunemente su dizionari a cui
vengono applicate delle regole (permutazioni, aggiunte di
prefissi/suffissi, cambio di caratteri comuni, maiuscole/minuscole).
Considerate che i file dizionario in attacchi mirati vengono creati ad-hoc
prendendo tutto il material digitale del target. notes: Mostrare un
piccolo esempio di `hashcat` (da preparare)
--
### E quindi?
Se non siamo capaci a fare qualcosa, cerchiamo qualcuno in grado di farlo.
--
### Password manager
Usiamo i password manager.
Sono dei programmi che generano e si ricordano delle password sicure, in
cambio di una sola master password (passphrase).
notes: spiegare master password, che e' possibile fare piu' liste di
password, suggerire buone pratiche.
--
### E la master password? Per le poche passphrase che non possiamo salvare
usiamo i seguenti accorgimenti:
- mai riusare una passphrase (dai te ne devi ricordare massimo 4, stacce)
- mai condividere una passphrase (no no no e no)
- mai scrivere una passphrase (a parte se sai quello che stai facendo)
- usa 4 parole a caso (veramente a caso) e costruiscici una storia sopra
per ricordarle.
notes: il `4` del primo punto e' un numero a caso. esempio live di scelta
passphrase.

138
slides/smartphone.md Normal file
View file

@ -0,0 +1,138 @@
<!-- .slide: data-background="img/this-is-your-brain-on-apps.jpg" -->
## Smartphone
--
## Smartphone
- Sono ovunque, sono Lo strumento usato per comunicare
- Telefonate, internet, chat, foto, video, etc..
- Non sono stati progettati per essere sicuri
--
## Meno controllo
Rispetto ad un computer è più complicato:
- sostituire il sistema operativo (pensate a quanto vi abbiamo rotto con
linux)
- investigare presenza di malware/virus
- disinstallare programmi di default (telefoni brandizzati)
- prevenire il monitoraggio
--
## Obsolescenza..
Inoltre il produttore del telefono dichiarando lo stesso obsoleto smette di
fornire aggiornamenti software (lasciando aperte vulnerabilità di pubblico
dominio)
--
## Geolocalizzazione - Cell
Un telefono acceso si collega ad una cella della rete telefonica, quale
cella e quale telefono vengono segnati dall'operatore, che tiene per molto
tempo questa informazione.
--
## Geolocalizzazione - Cell
E' possibile triangolare un dispositivo stimando la potenza del segnale
ricevuto da celle vicine, si attiva chiamando il 118 e tipo se siete sotto
sorveglianza.
Non c'è modo di evitare questo attacco se non lasciando il telefono a casa
:)
--
## Geolocalizzazione - IMSI
IMSI Catcher, un simulatore di antenne telefoniche sicuramente
[usato](https://www.ilfattoquotidiano.it/2015/06/13/con-limsi-catcher-cellulari-a-rischio-attenzione-il-cacciatore-ti-ascolta/1770363/)
[in
Italia](https://duckduckgo.com/?q=capitolatotecnicoradiomobili+site%3Apoliziadistato.it).
Può rispondere a domande del tipo: "dammi tutti i numeri di telefono
presenti in questa zona, quel giorno" senza farne richiesta al magistrato.
E'
[diffuso](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/wiki/Unmasked-Spies),
se volete divertirvi potete costruire un [imsi catcher
detector](https://seaglass.cs.washington.edu/)
notes: disabilitare 2g/3g e il roaming
--
## Geolocalizzazione
- WIFI Il telefono va' in giro [urlando ai quattro venti un suo
identificativo
univoco](http://www.gizmodo.co.uk/2017/02/heres-what-tfl-learned-from-tracking-your-phone-on-the-tube/).
notes: Disabilita il bluetooth e il wifi quando esci di casa.
--
## Geolocalizzazione
- GPS Il vostro telefono non parla con i satelliti, avviene il contrario.
Ma quando conosce la sua posizione puo' comunicarla su altri canali.
La geolocalizzazione usa anche la [lista delle reti
wireless]((https://location.services.mozilla.com/map) che trova intorno a
te. notes:
- Il GPS riceve solamente (accuracy ~5 metri a scopo civile)
- Si geolocalizza anche senza GPS ma col
[WIFI](https://location.services.mozilla.com/map#2/15.0/10.0) (~78 metri)
Faccio una lista delle reti wifi nel posto dove mi trovo e mi segno la
potenza del segnale di ognuna e/o il tempo di risposta.
- O con il cellular positioning (~600 metri)
--
## Malware Vedi
[qui](https://www.autistici.org/underscore/di-trojan-di-stato.html) e
[qui](https://www.autistici.org/underscore/di-trojan-di-stato-details.html)
che ne abbiamo parlato un sacco.
Tenete aggiornati i vostri dispositivi, installate solo le app che vi
servono, disinstallate le app di default, usate [software
libero](https://lineageos.org/).
--
## Buone pratiche
- Ma ascolta anche quando è spento?
- Devo togliere la batteria?
Per discorsi sensibili, lasciate i telefoni in un'altra stanza, se 20
persone contemporaneamente spengono il telefono in uno stesso luogo
l'operatore lo sa.
--
## Attacchi fisici
- Inserite un pin, una passphrase o una sequenza per sbloccare lo schermo
- No impronte digitali (stanno sul
[telefono](https://www.ccc.de/en/updates/2014/ursel) e sui
[server](https://apple.slashdot.org/story/19/03/24/0015213/how-the-fbi-easily-retrieved-michael-cohens-data-from-both-apple-and-google))
- [Cifrate il
telefono](https://trovalost.it/come-cifrare-un-telefono-android/)
notes: che sia il vostro coinquilino dell'altra stanza, un vostro ex, il
vostro capo o la digos, se qualcuno prende il vostro telefono in mano e non
c'e' protezione alcuna, non e' una bella cosa, Anche se non vi sequestrano
il telefono, in poco tempo e' possibile installare malware o addirittura in
alcuni casi reinstallare l'intero sistema operativo avendone accesso
fisico. Altra cosa, cifrate il telefono, nelle impostazioni -> sicurezza
potete mettere la stessa sequenza/pin/password per accendere il telefono e
per abilitarlo

View file

@ -0,0 +1,53 @@
<!-- .slide: data-background="img/cybertonia.jpg" -->
## **Server Radicali** <!-- .element: class="red"-->
--
## Fiducia
È difficile fare tutto da sol*
- mi faccio il mio server mail
- il mio nodo jabber
- la mia istanza mastodon
- il mio server di backup
tocca fidarsi di qualcuno...
--
## Autistici.org
> Crediamo che questo non sia affatto il migliore dei mondi possibili. La
> nostra risposta è offrire ad attivisti, gruppi e collettivi piattaforme
> per una comunicazione più libera e strumenti digitali per lautodifesa
> della privacy, come per esempio email, blog, mailing list, instant
> messaging e altro.
--
## Riseup.net
> Riseup provides online communication tools for people and groups working
> on liberatory social change. We are a project to create democratic
> alternatives and practice self-determination by controlling our own
> secure means of communications.
--
## Molti altri
Cerca altri [server radicali](https://riseup.net/en/security/resources/radical-servers)
--
## Cisti.org
> Uno spazio digitale liberato.
>
> Un server scapestrato e autogestito.
>
> Anticapitalista, antifascista, antirazzista, antisessista.
>

View file

@ -1,287 +0,0 @@
<section data-markdown>
# Autodifesa digitale
## (parte 1)
</section>
<section data-markdown>
# Perchè questo workshop
## Necessità di autodifesa digitale ;;
</section>
<section data-markdown>
# Cosa vedremo oggi?
### Installazione Sistema Operativo Linux
### Configurazione di strumenti base per proteggere nostri dati
</section>
<section data-markdown>
# Perchè Linux?
## Free e Open Souce
* Libertà di eseguire il programma per qualsiasi scopo.
* Libertà di studiare il programma e modificarlo.
* Libertà di ridistribuire copie del programma in modo da aiutare il prossimo.
* Libertà di migliorare il programma e di distribuirne pubblicamente i miglioramenti
</section>
<section data-markdown>
# Cos'è una distribuzione Linux?
Una distribuzione Linux (gergalmente "distro") è un insieme di software che costituisce un sistema operativo realizzato a partire da un kernel Linux comune(cuore).
</section>
<section data-markdown>
# Scegliere la distribuzione.
Useremo Xubuntu LTS (long time support) dura 5 anni (https://xubuntu.org/getxubuntu/ a 64bit)
Altre: Debian, Mint
</section>
<section data-markdown>
# Ambienti Grafici screenshot x 3
</section>
<section data-markdown>
# Perchè usiamo questa distribuzione?
Ha un ambiente grafico abbastanza leggero da poter essere installato anche su vecchi pc ma allo stesso tempo abbastanza funzionale per utenti alle prime armi perchè molto simile all'interfaccia a cui si è abituati.
</section>
<section data-markdown>
# Prima di iniziare l'installazione
## Creazione CD o chiavetta USB (Approfondimento)
## Modifiche al BIOS
* Ordine di Boot (usb, cdrom)
* Salva e riavvia
(foto) nested UEFI (Approfondimento)
</section>
<section data-markdown>
# Diverse Fasi:
### Passaggi semplici:
* Lingua, tipo di tastiera, timezone
### Passaggi importanti:
* Cifratura disco e partizionamento, utente e password
</section>
<section data-markdown>
# Cifratura disco
cosa è e a cosa serve
(quando funziona? quando è spento
quando non funziona? quando è acceso
se si lascia il computer incostudito spegnerlo
se è per poco tempo mettere lo screensaver con password)
(esempi)
(slide)
</section>
<section data-markdown>
# Passphrase
cos'è una passphrase buona?
a cosa serve questa passphrase?
</section>
<section data-markdown>
img kiki
(es brute force)
</section>
<section data-markdown>
utente e password
perchè si crea l'utente?
cos'è una password buona?
a cosa serve questa password?
non usare le stesse password
(se il pc è acceso e lasciato incustodito... istallazione)
</section>
<section data-markdown>
# Blocco schermo
## ScreenSaver
</section>
<section data-markdown>
# Fine installazione
# Primo avvio
</section>
<section data-markdown>
PASSWORD
Se le password sono:
lunghissime
complicate e poco mnemoniche
sempre diverse
Come facciamo a ricordarci le password? Se le scordo?
(slide 14)
</section>
<section data-markdown>
# Password manager
## Keepassx
Mi permette di salvare le credenziali(user/password) e un po' di informazioni correlate
- creare più db (con differente master password)
- creare gruppi per migliorare la ricerca
- aggiungere credenziali
- cercare tra le informazioni
- riaprire i db salvati
</section>
<section data-markdown>
Master password
Vediamo esempi (slide)
</section>
<section data-markdown>
Cifratura dispositivi USB
(Immagini)
Perchè crittare un usb?
Alcune ragioni come quelle sul sistema operativo ma in +
Può contenere foto, documenti o materiale da passare ad un'altra persona e la si può perdere
</section>
<section data-markdown>
# gnome-disk-utility
E' molto semplice
- Installa gnome-disk-utility
- Lo trovi in Tutto -> Dischi
- Inserisci la chiavetta, comparirà nella lista a sinistra
- Clicchi sulla chiavetta(attenzione accertarsi che sia quella)
- Scegliere luks + ext4
- Una volta creata la chiavetta crittata fare caso al lucchetto chiuso nell'icona
- Una volta decrittata fare caso al lucchetto aperto nell'icona
</section>
<section data-markdown>
# CANCELLAZIONE SICURA
Normalmente quando si cancella un file, il file finisce nel cestino.
Quando si svuota il cestino i file spariscono dal computer ma in realtà sono fisicamente
ancora leggibili dal disco fisso con software fatti apposta per recuperare i dati.
Esistono dei software fatti apposta per cancellare i dati che al posto di cancellarli ci
scrivono sopra un TOT di volte e solo alla fine cancellano il file.
E' una operazione costosa per il disco e anche in termini di tempo. Più il file è grosso
più tempo ci vuole.
Se si ha il disco cifrato occorre comunque fare questo tipo di cancellazione?
Va valutato di volta in volta, ma in alcuni casi, per file particolarmente sensibili è meglio comunque farlo. (Scaricato da emule pe sbaglio un film pedofilo, non voglio rischiare)
programmi: wipe -f -c -q -r %F, shred(non lo trova)
-f forza non la cancelazione
-c chiede il permesso se ne ha bisogno
-q non emette output
-r va in recursione se è una directory
%F passa tutta i files e le directory selezionate
come si usano: https://askubuntu.com/questions/57572/how-to-delete-files-in-secure-manner
- installo wipe
- apro la cartella home(casa) che trovo sul desktop
- vado in alto nel menù Modifica -> Imposta Azioni Personalizzate
- premo sul + per aggiungere un azione
- imposto l'azione
- salvo ed esco
- selezione il/i file(s) e clicco con il destro
- ora nel menù esce "Cancellazione Sicura"
</section>
<section data-markdown>
Screensaver
Blocco computer
</section>
<section data-markdown>
METADATI
- Cosa sono?
</section>
<section data-markdown>
- Che informazioni si portano con se? (video, immagini, documenti)
(slide)
</section>
<section data-markdown>
nome programma mat
- installare mat
- creare una azione personalizzata
- mat %F
(slide)
</section>
<section data-markdown>
NAVIGAZIONE DI TUTTI I GIORNI
(NON HO SLIDE)
- https(menarla, perchè usano password wifi deboli..
mostrare che può essere vettore di attacco?)
- disconnect, ublock per diminuire la profilazione(att.ne a volte,
alcuni siti non funzionano)
- noscript
- cookie?
- salvare le password nel browser?
- navigazione incognito(disambiguare) navigazione anonima intallare tor browser prossimo talk
</section>

2774
yarn.lock Normal file

File diff suppressed because it is too large Load diff