Escolar Documentos
Profissional Documentos
Cultura Documentos
Anexo V - Procedimentos para A Integração de Dispositivos Ao Sistema de Comunicação Do Centro de Medição Da Eletropaulo
Anexo V - Procedimentos para A Integração de Dispositivos Ao Sistema de Comunicação Do Centro de Medição Da Eletropaulo
integração de dispositivos ao
sistema de comunicação do
Centro de Medição da
Eletropaulo
Procedimentos para integração de dispositivos de comunicação ao
Sistema de Comunicação do Centro de Medição da Eletropaulo
Objetivo:
Fornecer detalhes do
funcionamento do sistema de
comunicação do Centro de Medição
e os procedimentos realizados
pelos dispositivos a ele conectados.
1
Procedimentos para integração de dispositivos de comunicação ao
Sistema de Comunicação do Centro de Medição da Eletropaulo
A função do gateway é repassar pacotes entre duas de suas portas de comunicação, uma
conhecida pela aplicação central e outra conhecida pelo dispositivo remoto de comunicação,
doravante chamado apenas de dispositivo. Ambos os lados tomam a iniciativa de conexão à
respectiva porta, porém, o dispositivo deve tentar manter-se permanentemente conectado,
de modo que a aplicação possa acessá-lo a qualquer momento. Esta estratégia permite que
aplicação desconheça o endereço real do dispositivo.
2
Procedimentos para integração de dispositivos de comunicação ao
Sistema de Comunicação do Centro de Medição da Eletropaulo
Número de série do SIMCARD com 15 caracteres ASCII, ou 15 caracteres ‘0’ se não
se aplicar.
Caso a conexão fique ociosa por um tempo maior que o configurado no dispositivo, este
deverá enviar um pacote de 10 bytes, não criptografado, com o texto “KEEP ALIVE”. Não há
resposta do gateway para mensagens de keep-alive.
Caso o gateway fique sem receber mensagens de keep-alive por um tempo maior que duas
vezes o tempo estabelecido, ele mesmo quebrará a conexão.
3
Procedimentos para integração de dispositivos de comunicação ao
Sistema de Comunicação do Centro de Medição da Eletropaulo
Se ocorrer quebra da conexão, não importando o motivo, o dispositivo deve tentar
reconectar-se imediatamente.
Diagramas:
Equipamento Dispositivo Gateway Aplicação
Conecta na porta
default
Envia chave +
id_data_linker
Envia msg
criptografada com a
identificação
Envia msg
criptografada com a
porta definitiva +
novo IP
Desconecta da
porta default
----------- --- --------------- --- --------------- --- ---------
Conecta na porta
definitiva
Envia chave +
id_data_linker
Envia msg
criptografada com a
identificação
----------- --- --------------- --- --------------- --- ---------
Envia pacote
Envia pacote
criptografado
Recebe,
descriptografa e
repassa pacote
Envia pacote
Envia pacote
criptografado
Recebe,
descriptografa e
repassa pacote
----------- --- --------------- --- --------------- --- ---------
Se tempo de
inatividade excedeu
tempo configurado,
envia mensagem de
keep-alive
4
Procedimentos para integração de dispositivos de comunicação ao
Sistema de Comunicação do Centro de Medição da Eletropaulo
Descrição da criptografia:
O algoritmo de criptografia usado é o XTEA ('Extended' Tiny Encryption Algorithm), que é
aplicado sobre blocos com 8 bytes de tamanho, deste modo, os pacotes deverão ter seus
tamanhos ajustados para valores múltiplos de 8 bytes.
Mensagens não criptografadas não são precedidas do tamanho, portanto, são transmitidas
em seu tamanho original.
As chaves de criptografia citadas abaixo indicam que deverá ser usada a chave anterior:
"FFFFFFFFFFFFFFFF" (16 bytes com o caractere "F" em ASCII)
FF.FF.FF.FF.FF.FF.FF.FF.FF.FF.FF.FF.FF.FF.FF.FF (16 bytes com valor 0xFF)
As chaves de criptografia citadas abaixo indicam que a criptografia deverá ser desativada:
"0000000000000000" (16 bytes com "0" em ASCII)
00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00 (16 bytes com valor 0x00)
5
Procedimentos para integração de dispositivos de comunicação ao
Sistema de Comunicação do Centro de Medição da Eletropaulo
//
// 'Extended' Tiny Encryption Algorithm
//
// Algorithm: David Wheeler & Roger Needham, Cambridge University Computer Lab
// http://www.cl.cam.ac.uk/ftp/papers/djw-rmn/djw-rmn-tea.html (1994)
// http://www.cl.cam.ac.uk/ftp/users/djw3/xtea.ps (1997)
//
// JavaScript implementation: Chris Veness, Movable Type Ltd: www.movable-type.co.uk
//
k[0] = Str4ToLong(key.substr(0,4));
k[1] = Str4ToLong(key.substr(4,4));
k[2] = Str4ToLong(key.substr(8,4));
k[3] = Str4ToLong(key.substr(12,4));
for (i=0; i<val.length; i+=8) { // encode val into s in 64-bit (8 char) blocks
v[0] = Str4ToLong(val.substr(i,4));
v[1] = Str4ToLong(val.substr(i+4,4));
code(v, k);
s += LongToStr4(v[0]) + LongToStr4(v[1]);
}
return(s)
// note: if val or key are passed as string objects, rather than strings, this
// function will throw an 'Object doesn't support this property or method' error
}
6
Procedimentos para integração de dispositivos de comunicação ao
Sistema de Comunicação do Centro de Medição da Eletropaulo
function decrypt(val, key)
{
var v = new Array(2), k = new Array(4), s = "", i;
k[0] = Str4ToLong(key.substr(0,4));
k[1] = Str4ToLong(key.substr(4,4));
k[2] = Str4ToLong(key.substr(8,4));
k[3] = Str4ToLong(key.substr(12,4));
for (i=0; i<val.length; i+=8) { // decode val into s in 64-bit (8 char) blocks
v[0] = Str4ToLong(val.substr(i,4));
v[1] = Str4ToLong(val.substr(i+4,4));
decode(v, k);
s += LongToStr4(v[0]) + LongToStr4(v[1]);
}
if (s.indexOf("\x00") != -1) {
// strip trailing null chars resulting from filling 4-char blocks
s = s.substr(0, s.indexOf("\x00"));
}
return(unescape(s));
}
function code(v, k)
{
// Extended TEA: this is the 1997 revised version of Needham & Wheeler's algorithm
// params: v[2] 64-bit value block; k[4] 128-bit key
var y = v[0], z = v[1];
var delta = 0x9E3779B9, limit = delta*32, sum = 0;
function decode(v, k)
{
var y = v[0], z = v[1];
var delta = 0x9E3779B9, sum = delta*32;
while (sum != 0) {
z -= (y<<4 ^ y>>>5)+y ^ sum+k[sum>>>11 & 3];
sum -= delta;
y -= (z<<4 ^ z>>>5)+z ^ sum+k[sum & 3];
}
v[0] = y; v[1] = z;
}
7
Procedimentos para integração de dispositivos de comunicação ao
Sistema de Comunicação do Centro de Medição da Eletropaulo
function Str4ToLong(s) // convert 4 chars of s to a numeric long
{
var v = s.charCodeAt(0) +
(s.charCodeAt(1)<<8) +
(s.charCodeAt(2)<<16) +
(s.charCodeAt(3)<<24);
return(isNaN(v) ? 0 : v);
}
</script>
</head>
<body>
<p><b>TEA (Tiny Encryption Algorithm)</b></p>
<p>128 bits (16 characters) from the Key will be used to encrypt the Value, using
Wheeler & Needham’s
<a href="http://www.ftp.cl.cam.ac.uk/ftp/papers/djw-rmn/djw-rmn-tea.html">Tiny
Encryption Algorithm</a>.</p>
<p>This can be useful for instance to encrypt passwords which shouldn’t
be stored in clear.</p>
<p>The more recent <a href="TEAblock.html"><b>Block TEA</b></a> is simpler and
more
effective, especially for arbitrary-length strings.</p>
<form name="f" action="none!">
<table>
<tr>
<td>Key:</td>
<td><input type="text" name="key" size="16" value="encryption-key"></td>
</tr>
<tr>
<td>Value:</td>
<td><input type="text" name="val" size="60"
value="some text to be encrypted such as a password"></td>
</tr>
<tr>
<td><script type="text/javascript">var ciferText;</script>
<!-- use 'ciferText' because <input> field will truncate at null chars -->
<input type="button" value="Encrypt it"
onClick='f.encrypted.value = ciferText = encrypt(f.val.value, f.key.value)'></td>
</tr>
<tr>
<td>Encrypted value:</td>
<td><input type="text" name="encrypted" size="60"></td>
</tr>
<tr>
<td><input type="button" value="Decrypt it"
onClick='f.decrypted.value = decrypt(ciferText, f.key.value)'></td>
</tr>
8
Procedimentos para integração de dispositivos de comunicação ao
Sistema de Comunicação do Centro de Medição da Eletropaulo
<tr>
<td>Value back in clear:</td>
<td><input type="text" name="decrypted" size="60"></td>
</tr>
</table>
</form>
<p>Use ‘View Source’ to see the JavaScript implementation.</p>
<p><ahref="http://www.movable-type.co.uk">◄www.movable-
pe.co.uk</a></p>
</body>
</html>
9
Procedimentos para integração de dispositivos de comunicação ao
Sistema de Comunicação do Centro de Medição da Eletropaulo
#ifndef __XTEA_H__
#define __XTEA_H__
namespace XTEA
{
void encrypt( char* val, int size, char* key );
void decrypt( char* val, int size, char* key );
}
#endif
10
Procedimentos para integração de dispositivos de comunicação ao
Sistema de Comunicação do Centro de Medição da Eletropaulo
/*---------------------------------------------------------
Nome: xtea.cpp
---------------------------------------------------------
Descrição:
JavaScript implementation:
Chris Veness, Movable Type Ltd: www.movable-type.co.uk
C/C++ implementation:
Ricardo Yukio Hayashi - Atech - 30/11/2004
Ronaldo David Cavaquini - Eletropaulo - 05/10/2005
---------------------------------------------------------*/
#include <string.h>
#include <xtea.h>
#include <stdio.h>
11
Procedimentos para integração de dispositivos de comunicação ao
Sistema de Comunicação do Centro de Medição da Eletropaulo
/*---------------------------------------------------------
Extended TEA: this is the 1997 revised version of
Needham & Wheeler's algorithm
---------------------------------------------------------
Parameters:
v[2] = 64-bit value block
k[4] = 128-bit KEY
---------------------------------------------------------
Return: Nothing
---------------------------------------------------------*/
static void code( unsigned int* v, unsigned int* k )
{
unsigned int y = v[0];
unsigned int z = v[1];
unsigned int sum = 0;
/*---------------------------------------------------------
Extended TEA: this is the 1997 revised version of
Needham & Wheeler's algorithm
---------------------------------------------------------
Parameters:
v[2] = 64-bit value block
k[4] = 128-bit KEY
---------------------------------------------------------
Return: Nothing
---------------------------------------------------------*/
static void decode( unsigned int* v, unsigned int* k )
{
unsigned int y = v[0];
unsigned int z = v[1];
/*---------------------------------------------------------
Convert 4 chars of s to a numeric long
---------------------------------------------------------
Parameters:
s = array of chars
---------------------------------------------------------
12
Procedimentos para integração de dispositivos de comunicação ao
Sistema de Comunicação do Centro de Medição da Eletropaulo
Return:
Resultant value
---------------------------------------------------------*/
static unsigned int Str4ToLong( char* s )
{
unsigned int d = (unsigned char) s[3];
d <<= 8;
d += (unsigned char) s[2];
d <<= 8;
d += (unsigned char) s[1];
d <<= 8;
d += (unsigned char) s[0];
return d;
}
/*---------------------------------------------------------
Convert a numeric long to 4 char string
---------------------------------------------------------
Parameters:
v = long to convert
s = destinaion array of chars
---------------------------------------------------------
Return: Nothing
---------------------------------------------------------*/
static void LongToStr4( unsigned int v, char* s )
{
s[0] = v & 0xFF;
s[1] = v >> 8 & 0xFF;
s[2] = v >> 16 & 0xFF;
s[3] = v >> 24 & 0xFF;
}
/*---------------------------------------------------------
128 bits (16 chars) of string 'key' are used to encrypt
string 'val'
---------------------------------------------------------
Parameters:
val = ptr to the buffer
size = lenght of the buffer
key = 128 bit key
---------------------------------------------------------
Return: Nothing
---------------------------------------------------------*/
void XTEA::encrypt( char* val, int size, char* key )
{
unsigned int v[2];
unsigned int k[4];
char s[5];
13
Procedimentos para integração de dispositivos de comunicação ao
Sistema de Comunicação do Centro de Medição da Eletropaulo
code( v, k );
LongToStr4( v[0], s );
memmove( &val[i], s, 4 );
LongToStr4( v[1], s );
memmove( &val[i+4], s, 4 );
}
}
/*---------------------------------------------------------
Use the 128 bit key to decrypt the string v
---------------------------------------------------------
Parameters:
val = ptr to the buffer
size = lenght of the buffer
key = 128 bit key
---------------------------------------------------------
Return: Nothing
---------------------------------------------------------*/
void XTEA::decrypt( char* val, int size, char* key )
{
unsigned int v[2];
unsigned int k[4];
char s[5];
14
Procedimentos para integração de dispositivos de comunicação ao
Sistema de Comunicação do Centro de Medição da Eletropaulo
Conectado
Mensagem de keep-alive:
SEND
4B 45 45 50 20 41 4C 49 56 45
15