Compare commits
49 commits
Author | SHA1 | Date | |
---|---|---|---|
a24451e654 | |||
d044d133b0 | |||
c028a406db | |||
988240c9b6 | |||
a4a147c480 | |||
46b7a26bb1 | |||
ccd6ba2f1e | |||
dd2c475d46 | |||
5d0faa8d75 | |||
98c38e68ce | |||
9dfb9ec976 | |||
a12fc3d710 | |||
8b1089874a | |||
a71cfbb13d | |||
5f546a3ec6 | |||
fbdac64915 | |||
c5fda97fa4 | |||
fa2da6a000 | |||
80bb4c9f96 | |||
b670b2f824 | |||
4d6c5c6d54 | |||
079d92aef7 | |||
63c3144029 | |||
918accf948 | |||
febfbde6b8 | |||
e14a714860 | |||
492e4a1b82 | |||
8f64987e39 | |||
fc18a9f897 | |||
2437a39221 | |||
c0415c3393 | |||
d643999537 | |||
7a238de401 | |||
bd01fd3e61 | |||
d4ba202469 | |||
bd0e972549 | |||
d519ed1f40 | |||
0899b49b3c | |||
f9cf70cb12 | |||
4b1328ae7e | |||
776a746dc7 | |||
4468ee8b5a | |||
4dee14702d | |||
2dd005af22 | |||
28700b8d83 | |||
f4c05b43a7 | |||
dceb7b6821 | |||
8f29083263 | |||
d120cb3fa7 |
13
.gitignore
vendored
Normal 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
|
82
Gruntfile.js
|
@ -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' ] );
|
||||
|
||||
|
|
39
README.md
|
@ -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
|
@ -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.
|
||||
|
||||
|
|
@ -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": [
|
||||
|
|
|
@ -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 */
|
||||
|
|
700
css/reveal.css
402
css/reveal.scss
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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); }
|
||||
|
|
|
@ -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); }
|
||||
|
|
|
@ -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); }
|
||||
|
|
|
@ -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); }
|
||||
|
|
|
@ -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); }
|
||||
|
|
|
@ -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); }
|
||||
|
|
|
@ -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); }
|
||||
|
|
|
@ -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); }
|
||||
|
|
|
@ -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); }
|
||||
|
|
|
@ -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); }
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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); }
|
||||
|
|
10
demo.html
|
@ -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">
|
||||
“The nice thing about standards is that there are so many to choose from”</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">
|
||||
“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 & 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
After Width: | Height: | Size: 1.3 MiB |
BIN
img/anon.jpg
Normal file
After Width: | Height: | Size: 580 KiB |
BIN
img/antani.jpg
Normal file
After Width: | Height: | Size: 2.1 MiB |
BIN
img/brodino.jpg
Normal file
After Width: | Height: | Size: 2.1 MiB |
BIN
img/comunicazione.jpg
Normal file
After Width: | Height: | Size: 106 KiB |
BIN
img/copertina.png
Normal file
After Width: | Height: | Size: 193 KiB |
BIN
img/cybertonia.jpg
Normal file
After Width: | Height: | Size: 129 KiB |
BIN
img/freedom.jpg
Normal file
After Width: | Height: | Size: 158 KiB |
BIN
img/hd.jpg
Normal file
After Width: | Height: | Size: 431 KiB |
BIN
img/il-materiale-informatico-sequestrato-dalla-polizia.jpg
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
img/internet.jpg
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
img/metadata.jpg
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
img/passhint.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
img/password-requisiti.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
img/password_strength.png
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
img/pasta-e-forchetta.jpg
Normal file
After Width: | Height: | Size: 163 KiB |
BIN
img/scimmia.jpg
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
img/think.jpg
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
img/this-is-your-brain-on-apps.jpg
Normal file
After Width: | Height: | Size: 237 KiB |
BIN
img/tor.png
Normal file
After Width: | Height: | Size: 46 KiB |
807
index.html
|
@ -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
22
js/password.js
Normal 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;
|
||||
},
|
||||
}
|
||||
})
|
277
js/reveal.js
|
@ -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
31
js/zxcvbn.js
Normal 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;
|
||||
}
|
1758
npm-debug.log
5498
package-lock.json
generated
Normal file
31
package.json
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.+?)$';
|
||||
|
||||
|
|
|
@ -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 );
|
||||
|
||||
}());
|
||||
}());
|
||||
|
|
|
@ -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"
|
||||
},
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 };
|
||||
})();
|
||||
|
|
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
53
slides/strumenti-radicali.md
Normal 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 l’autodifesa
|
||||
> 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.
|
||||
>
|
||||
|
|
@ -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>
|