e_erkin_20_1024 <- experimentos %>%
select(erkin.20.1024) %>%
transmute(medicao = erkin.20.1024, config = "erkin.20.1024")
e_erkin_20_2048 <- experimentos %>%
select(erkin.20.2048) %>%
transmute(medicao = erkin.20.2048, config = "erkin.20.2048")
e_erkin_50_1024 <- experimentos %>%
select(erkin.50.1024) %>%
transmute(medicao = erkin.50.1024, config = "erkin.50.1024")
e_erkin_50_2048 <- experimentos %>%
select(erkin.50.2048) %>%
transmute(medicao = erkin.50.2048, config = "erkin.50.2048")
grouped_erkin_e <- rbind()
e_garcia_20_1024 <- experimentos %>%
select(garcia.20.1024) %>%
transmute(medicao = garcia.20.1024, config = "garcia.20.1024")
e_garcia_20_2048 <- experimentos %>%
select(garcia.20.2048) %>%
transmute(medicao = garcia.20.2048, config = "garcia.20.2048")
e_garcia_50_1024 <- experimentos %>%
select(garcia.50.1024) %>%
transmute(medicao = garcia.50.1024, config = "garcia.50.1024")
e_garcia_50_2048 <- experimentos %>%
select(garcia.50.2048) %>%
transmute(medicao = garcia.50.2048, config = "garcia.50.2048")
experimentos_agrupados <-
rbind(e_garcia_20_1024, e_garcia_20_2048, e_garcia_50_1024, e_garcia_50_2048,
e_erkin_20_1024, e_erkin_20_2048, e_erkin_50_1024, e_erkin_50_2048) %>%
group_by(config) %>%
summarise(media = mean(medicao))
experimentos_agrupados$protocolo = ifelse(grepl("erkin", experimentos_agrupados$config), "erkin", "garcia")
experimentos_agrupados$chave = ifelse(grepl("1024", experimentos_agrupados$config), 1024, 2048)
experimentos_agrupados$n_medidores = ifelse(grepl("50", experimentos_agrupados$config), 50, 20)
experimentos_agrupados <- experimentos_agrupados %>%
select(-c(config)) %>%
mutate(n_medidores = as.factor(n_medidores),
chave = as.factor(chave))Contexto
Durante o ano de 2016, em uma parceria firmada entre a empresa HP e o laboratório LSD na UFCG, um projeto foi realizado. Este projeto tratou de aspectos de privacidade no desenvolvimento de aplicações de internet das coisas. Surgiu então a necessidade de avaliar diferentes protocolos criptográficos de comunicação entre medidores de energia inteligentes. Por isto, algumas implementações de protocolos encontrados na literatura foram conduzidas.
Nesta investigação comparamos a performance dos diferentes protocolos. Esta comparação é útil para auxiliar na escolha do protocolo utilizado na implementação de novos sistemas.
Planejamento e Medição
Os experimentos foram rodados com variações de 3 fatores, com 2 níveis cada. Foram conduzidas 20 replicações para cada caso.
Fatores e Níveis
- Protocolo
- Erkin
- Garcia
- N° de medidores no sistema
- 20
- 50
- Tamanho da chave
- 1024
- 2048
Os dados
Aqui está um sumário dos dados que coletamos. Os dados completos estão disponíveis em:
https://github.com/jslucassf/privacy-performance-smart-metering/blob/master/experiments_adsd.csv.
experimentos_agrupados## # A tibble: 8 x 4
## media protocolo chave n_medidores
## <dbl> <chr> <fct> <fct>
## 1 0.321 erkin 1024 20
## 2 0.696 erkin 2048 20
## 3 1.18 erkin 1024 50
## 4 3.52 erkin 2048 50
## 5 0.772 garcia 1024 20
## 6 4.20 garcia 2048 20
## 7 4.87 garcia 1024 50
## 8 26.3 garcia 2048 50
Resultados
Vamor agora analisar os efeitos de variar cada um dos fatores.
Protocolo
experimentos_agrupados %>%
plot_ly(y = ~media, x = ~protocolo, type="scatter", mode="markers", color=~protocolo,
marker= list(size = 10)) %>%
layout(xaxis = list(title = "Protocolo"))## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
media_garcia <- (experimentos_agrupados %>% filter(protocolo=="garcia") %>% select(media))$media %>% mean()
media_erkin <- (experimentos_agrupados %>% filter(protocolo=="erkin") %>% select(media))$media %>% mean()Ao compararmos os protocolos, a presença de um valor muito alto em Garcia nos leva a crer que o Garcia seja mais lento e de fato este é o caso. Em média, o tempo de execução no protocolo em questão foi de 9.0464055 enquanto que para o protocolo de Erkin o valor foi de 1.4293064.
Número de Medidores
experimentos_agrupados %>%
plot_ly(y = ~media, x = ~n_medidores, type="scatter", mode="markers", color=~n_medidores,
marker= list(size = 10)) %>%
layout(xaxis = list(title = "Número de medidores no sistema"))## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
Parece intuitivo que o número de medidores aumentaria o tempo de processamento e isto é o que a visualização nos apresenta.
Tamanho da Chave
experimentos_agrupados %>%
plot_ly(y = ~media, x = ~chave, type="scatter", mode="markers", color=~chave,
marker= list(size = 10)) %>%
layout(xaxis = list(title = "Tamanho da chave"))## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
Mais uma vez, é intuitivo que o tamanho da chave aumenta o tempo de processamento.
Protocolo x Número de Medidores e Tamanho da Chave
Podemos comparar novamente os protocolos, agora levando em consideração as outras duas variáveis.
experimentos_agrupados %>%
plot_ly(y = ~media, x = ~n_medidores, symbol=~chave, type="scatter", mode="markers", color=~protocolo,
marker= list(size = 10)) %>%
layout(xaxis = list(title = "Protocolo"))## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
Concluímos então que de fato o protocolo Garcia é mais lento. Apesar de constatarmos que o tamanho da chave aumenta o tempo de processamento, mesmo as chaves maiores (2048) no protocolo de Erkin, ainda estão abaixo das chaves menores (1024) no protocolo de Garcia, ou seja, Com chaves grandes, Erkin ainda possui melhor performance que Garcia com chaves pequenas.
Outra coisa que podemos observar, é que provavelmente esta diferença na performance dos dois protocolos é exponencial. Para poucos medidores, a variação existe mas é mínima, entretanto com maior número de medidores a diferença é significativamente maior.