NTP.br
NTP.br
br
([Link]
(/)
([Link]
br/assuntos/areas-de-
atuacao/tempo-e-frequencia)
IMPRENSA (HTTPS://[Link]/IMPRENSA/)
O NTP
NTP significa Network Time Protocol ou Protocolo de Tempo para Redes. É o padrão que permite a
sincronização dos relógios dos dispositivos de uma rede como servidores, estações de trabalho, roteadores e
outros equipamentos à partir de referências de tempo confiáveis. Além do protocolo de comunicação em si, o
NTP define uma série de algoritmos utilizados para consultar os servidores, calcular a diferença de tempo e
estimar um erro, escolher as melhores referências e ajustar o relógio local.
OBS: ao longo desta página utiliza-se o comando ntpq da distribuição do NTPsec para exemplificar o acesso
às variaveis do sistema ligadas a cada conceito. O Chrony e outras implementações completas do NTP usam
internamente as mesmas variáveis e conceitos, definidas na especificação do NTP, mas as ferramentas de
consulta, nomes e forma com que são apresentadas podem ser diferentes.
Arquitetura do NTP
O Funcionamento do NTP
Troca de Mensagens e Cálculo do Deslocamento
O Algorítmo de Filtro de Relógio
O Algorítimo de Seleção dos Relógios
O Algorítmo de Agrupamento
O Algorítmo de Combinação de Relógios
Disciplina do Relógio Local
NTS e Segurança
[Link] 1/20
4/23/26, 1:43 PM [Link]
Arquitetura do NTP
Os servidores NTP formam uma topologia hierárquica, dividida em camadas ou estratos (em inglês: strata)
numerados de 0 (zero) a 16 (dezesseis). O estrato 0 (stratum 0) na verdade não faz parte da rede de servidores
NTP, mas representa a referência primária de tempo, que é geralmente um receptor do Sistema de
Posicionamento Global (GPS) ou um relógio atômico. O estrato 16 indica que um determinado servidor está
inoperante.
O estrato 0, ou relógio de referência, fornece o tempo correto para o estrato 1, que por sua vez fornece o tempo
para o estrato 2 e assim por diante. O NTP é então, simultaneamente, servidor (fornece o tempo) e cliente
(consulta o tempo). A topologia está ilustrada na Figura 1.
Em teoria, quanto mais perto da raiz, ou seja, do estrato 0, maior a exatidão do tempo. O estrato ao qual o
servidor pertence é a principal métrica utilizada pelo NTP para escolher dentre vários, qual o melhor servidor
para fornecer o tempo. Na prática, contudo, as diferenças de exatidão entre os estratos não são expressivas e
há, no momento de escolher-se um conjunto de servidores de tempo para configurar um determinado cliente,
outros fatores mais importantes a se considerar, como por exemplo a capacidade e carga à qual os servidores
estão submetidos, o atraso e a assimetria da rede.
O estrato de um servidor não é uma característica estática. Se houver perda de conexão com as fontes de
tempo, ou outros fatores que modifiquem a topologia da rede, o estrato pode variar.
# ntpq -p
remote refid st t when poll reach delay
========================================================================================
+[Link] .ONBR. 1 8 17 64 377 1.2987 -
-[Link] .ONBR. 1 8 12 64 377 15.6381 -
[Link] [Link] 2 3 352 64 40 9.5079 -
+[Link] .ONBR. 1 8 10 64 37 9.5089 -
*[Link] .GPS. 1 8 7 64 377 1.2081 -
-[Link] [Link] 3 8 2 64 377 115.6774 -
-[Link] [Link] 2 8 7 64 377 195.3313 -
As relações entre os diferentes dispositivos NTP são normalmente chamadas de Associações. Elas podem
ser:
Permanentes: são criadas por uma configuração ou comando e mantidas sempre. Este é o tipo de
associação recomendável para se trabalhar em aplicações do dia a dia.
[Link] 2/20
4/23/26, 1:43 PM [Link]
Priorizáveis (preemptables): são específicas da versão 4 do NTP e criadas por uma configuração ou
comando, podem ser desfeitas no caso de haver um servidor melhor, ou depois de um certo tempo.
Efêmeras ou transitórias: são criadas por solicitação de outro dispositivo NTP e podem ser desfeitas
em caso de erro ou depois de um certo tempo.
Cliente/servidor: (client - server) É uma assiciação permanente e a forma mais comum de configuração.
Um dispositivo faz o papel de cliente, solicitando informações sobre o tempo a um servidor. O cliente
tem conhecimento das associações com os servidores e do estado da troca de pacotes. Outro dispositivo
faz o papel de servidor, respondendo à solicitação do cliente com informações sobre o tempo. O
servidor não armazena informações sobre o diálogo com o cliente ou sobre sua associação com o
mesmo.
No processo, então, o cliente envia um pacote ao servidor a aguarda a resposta, que vem em seguida.
Isso pode ser descrito também como uma operação do tipo pull, dizendo que o cliente busca os dados
necessários sobre o tempo no servidor.
Para configurar o cliente dessa forma é usado o parâmetro server no arquivo de configuração, seguido
do nome ou endereço do servidor. É recomendável também usar adicionalmente o parâmetro iburst
no comando, que serve para acelerar a sincronização inicial.
Um cliente pode criar associações com vários servidores simultaneamente. Na verdade é recomendável
que seja assim. E um servidor pode fornecer tempo a diversos clientes simultaneamente.
Pela forma com que o protocolo foi projetado, um dispositivo (host) NTP pode ser cliente e servidor ao
mesmo tempo. Alguns softwares, como o NTPSec e a implementação de referência do NTP, que hoje é
considerada legada, não permitem a separação das funções, ou seja, sempre abrem sockets e atuam
como servidores, mesmo que o usuário só precise deles como clientes. Isso pode ter implicações de
segurança e muitas vezes é necessário o uso de firewalls. O Chrony consegue operar apenas como
cliente, se corretamente configurado. O OpenNTPD e o systemd-timesyncd foram desenhados para
operar apenas como clientes.
O modo cliente/servidor é o modo recomendado pelo [Link] para a operação do NTP. É o único
modo que opera com NTPsec. Apenas use outros modos se tiver uma necessidade específica e souber
com muita certeza o que está fazendo.
Modo simétrico: (symmetric mode) Apenas a Dois ou mais dispositivos NTP podem ser configurados
como pares (peers), de forma que possam tanto buscar o tempo, quanto fornecê-lo, garantindo
redundância mútua. Essa configuração faz sentido para dispositivos no mesmo estrato, configurados
também como clientes de um ou mais servidores. Caso um dos pares perca a referência de seus
servidores, os demais pares podem funcionar como referência de tempo.
Ativo: O dispositivo A configura o dispositivo B como seu par (criando dessa forma uma
associação permanente). Por sua vez, o dispositivo B também configura o dispositivo A como seu
par (também cria uma associação permanente).
Passivo: O dispositivo A configura o dispositivo B como seu par (modo simétrico ativo). Mas o
dispositivo B não tem o dispositivo A na sua lista de servidores ou pares. Ainda assim, ao receber
um pacote de A, o dispositivo B cria uma associação transitória, de forma a poder fornecer ou
receber o tempo de A.
[Link] 3/20
4/23/26, 1:43 PM [Link]
Esse modo é particularmente susceptível a ataques, onde um dispositivo intruso pode estar
configurado no modo simétrico ativo e fornecer informações de tempo falsas para outro. Por isso
deve sempre ser usado com criptografia.
Para configurar um dispositivo no modo simétrico utiliza-se o parâmetro peer , seguido do nome
ou IP do par. Com o modo simétrico não deve-se utilizar os parâmetros burst ou iburst .
Para evitar a falha de segurança descrita no modo simétrico passivo, caso opte por utilizá-lo,
ignorando as recomendações contra isso deste site, deve-se sempre manter a autenticação
habilitada. Isso é o padrão do sistema. Para desabilitar a autenticação inclui-se o parâmetro
disable auth no arquivo de configuração. Não desabilite a autenticação, a menos que se
entenda muito bem as conseqüências e haja uma razão muito forte.
Nota: no NTPSec esse modo não existe. Os parâmetros de configuração citados aqui são
referentes à implementação de referência (legada) do NTP.
Note que no modo Cliente - Servidor não há nenhuma problema em configurar A como servidor de B e,
ao mesmo tempo B como servidor de A.
Broadcast ou Multicast: O NTP pode fazer uso de pacotes do tipo broadcast ou multicast para enviar ou
receber informações de tempo. Esse tipo de configuração pode ser vantajosa no caso de redes locais
com poucos servidores alimentando uma grande quantidade de clientes.
O cliente NTP no modo broadcast ou multicast (à partir da versão 4), ao receber o primeiro pacote de um
servidor, busca os dados por um curto período de tempo, como se estivesse no modo cliente - servidor, a
fim de conhecer o atraso envolvido. Ou seja, durante alguns instantes há troca de pacotes entre cliente e
servidor, depois disso o cliente passa apenas a receber os pacotes broadcast ou multicast do servidor.
Para configurar o cliente utiliza-se o parâmetro broadcastclient . Na versão 3 do NTP era necessário
também utilizar o parâmetro broadcastdelay para definir o atraso de rede envolvido.
Como no caso do modo simétrico passivo, há aqui uma questão de segurança, porque um intruso pode
facilmente enviar pacotes NTP falsos em modo broadcast ou multicast. Então, caso opte por utilizar um
desses modos, ignorando as recomendações contra isso deste site, mantenha sempre a
autenticação habilitada. Isso é o padrão do sistema. Para desabilitar a autenticação inclui-se o
parâmetro disable auth no arquivo de configuração. Caso opte por usar o modo broadcast ou
multicast, não desabilite a autentiação, a menos que se entenda muito bem as conseqüências e haja
uma razão muito forte.
Nota: no NTPSec esse modo não existe. Os parâmetros de configuração citados aqui são referentes à
implementação de referência (legada) do NTP.
Ao consultar-se a lista de servidores no NTP, o tipo de comunicação de dados na rede (t) é informado. Pode ser
local, unicast, multicast ou broadcast. No exemplo a seguir todos os servidores usam unicast. Valores
numéricos indicam o uso de NTS, que só é possível em associações do tipo cliente/servidor, que são unicast.
Se não houver uso de NTPSec o unicast é representado pela letra u:
[Link] 4/20
4/23/26, 1:43 PM [Link]
# ntpq -p
remote refid st t when poll reach delay
========================================================================================
+[Link] .ONBR. 1 8 13 128 377 1.3328
-[Link] .ONBR. 1 8 122 128 377 14.8119 -
-[Link] [Link] 2 5 398 128 210 9.5676
+[Link] .ONBR. 1 8 64 128 377 9.6119
*[Link] .GPS. 1 8 46 128 377 1.3747
-[Link] [Link] 3 8 38 128 377 115.6220 -
-[Link] [Link] 2 8 11 128 377 195.3852 -
Voltar
O Funcionamento do NTP
Como já visto, NTP é um protocolo de rede que permite a sincronização dos relógios dos dispositivos à partir
de referências de tempo confiáveis. Num primeiro momento isso pode parecer algo tão simples quanto
"consultar o tempo em um servidor" e "ajustar o relógio local" de tempos em tempos. Na verdade, algumas
implementações do SNTP, a versão simplificada do protocolo, fazem isso e apenas isso. Mas o NTP em sua
forma completa é muito mais complexo.
[Link] 5/20
4/23/26, 1:43 PM [Link]
A Figura 2 mostra os principais componentes do NTP, que são apresentados e explicados de uma forma
bastante simplificada no texto a seguir. Para informações mais precisas sobre como são calculadas as várias
métricas do sistema e sobre como devem funcionar os diversos algorítmos, recomenda-se a consulta direta às
RFCs e à documentação oficial.
Voltar
A troca de mensagens entre cliente e servidor permite que o cliente descubra qual seu deslocamento (offset)
em relação ao servidor, ou seja, o quanto seu relógio local difere do relógio do servidor.
Consideremos servidor e cliente com relógios não sincronizados. A troca de mensagens, ilustrada na Figura 3,
dá-se da seguinte forma:
Ao receber a Mensagem 2, o Cliente passa a conhecer os instantes a, x, y e b. Mas a e b estão numa escala
de tempo, enquanto x e y em outra. O valor do incremento dessas escalas é o mesmo, mas os relógios não
estão sincronizados.
Não é possível, então, calcular o tempo que a Mensagem 1 levou para ser transmitida (T-ida), nem o tempo
que a Mensagem 2 gastou na rede (T-volta). Contudo, o tempo total de ida e volta, ou atraso (também
conhecido por Round Trip Time ou RTT) que é a soma T-ida + T-volta pode ser calculado como:
[Link] 6/20
4/23/26, 1:43 PM [Link]
Considerando-se que o tempo de ida é igual ao tempo de volta, pode-se calcular o deslocamento entre o
servidor e o relógio local como como:
Ao olhar a Figura 4, é fácil observar que T-ida=2 e T-volta=2. Contudo, nem o Cliente nem o Servidor têm
essa visão. O Servidor ao final da troca de mensagens descarta todas as informações sobre a mesma. O
Cliente conhece as variáveis a=9, x=4, y=9 e b=18, mas à partir delas é impossível calcular T-ida ou T-volta.
Contudo, é possível calcular o atraso e o deslocamento:
Um deslocamento de -7 significa que o relógio local do Cliente deve ser atrasado 7 unidades de tempo para
se igualar ao do Servidor.
Note-se que foi assumido alguns parágrafos acima, para se conseguir calcular o deslocamento, que T-ida = T-
volta. Mas isso nem sempre é verdade! Há atrasos estocásticos nas redes devido às filas dos roteadores e
switchs. Numa WAN ou na Internet enlaces de diferentes velocidades e roteamento assimétrico, além de outros
fatores, também causam diferenças entre T-ida e T-volta.
No entanto o NTP funciona exatamente dessa forma, considerando que T-ida = T-volta.
Isso implica num erro. Esse erro, representado na Figura 5, é no pior caso igual à metade do atraso. Ou seja:
[Link] 7/20
4/23/26, 1:43 PM [Link]
Tome-se o seguinte exemplo numérico, ilustrando o pior caso. Os servidores são os mesmos da Figura 4, mas
a primeira mensagem leva um tempo desprezível pra ser enviada, enquanto a segunda demora 4 unidades de
tempo: a=9; x=2; y=7; b=18. Nesse caso T-ida=0 e T-volta=4. O exemplo está ilustrado na Figura 6.
O deslocamento está errado! Sabe-se que o valor correto é -7, contudo o valor calculado é -9. Isso deve-se a
assimetria da rede, no tocante a T-ida e T-volta.
No entanto, à partir do cálculo do deslocamento e do atraso, e levando em conta a limitação do método, que
considera T-ida=T-volta, sabe-se que o deslocamente verdadeiro está entre:
Voltar
[Link] 8/20
4/23/26, 1:43 PM [Link]
No início da sincronização o cliente NTP faz uma consulta a cada servidor a cada 64s. Esse período varia ao
longo do tempo, geralmente aumenta, até chegar a 1024s (aproximadamente 17min). As variáveis minpoll e
maxpoll definem o mínimo e o máximo, e são representadas em potência de 2. Ou seja, por padrão minpoll
= 6 (26=64) e maxpoll = 10 (210=1024).
Numa consulta à lista de servidores NTP, a variável poll representa o período e a variável when é um contador
que indica quantos segundos se passaram desde a última consulta; quando poll = when uma nova consulta é
realizada e a variável when é zerada (se a consulta é bem sucedida). Se o parâmetro iburst é utilizado na
configuração de um servidor, a taxa de envio de pacotes é acelerada no início da sincronização, de forma a se
conseguir um conjunto de dados mais depressa.
A variável reach representa um registrador de deslocamento de 8 bits, cujo valor é mostrado no formato octal.
Um bit 1 significa que o cliente obteve resposta do servidor para uma consulta. Então o valor 377 = 11.111.111,
significa que as últimas 8 consultas ao servidor foram bem sucedidas. Valores diferentes de 377 mostram que
algumas consultas falharam, dando indícios de problemas de conectividade ou com o servidor em questão.
# ntpq -p
remote refid st t when poll reach delay
========================================================================================
+[Link] .ONBR. 1 8 31 256 377 1.3075
-[Link] .ONBR. 1 8 253 256 377 15.6301
-[Link] [Link] 2 7 278 256 42 9.5679 -
+[Link] .ONBR. 1 8 233 256 377 9.5892 -
*[Link] .GPS. 1 8 71 256 377 1.2993 -
-[Link] [Link] 3 8 55 256 377 115.6377 -
-[Link] [Link] 2 8 18 256 377 195.4044 -
[Link] 9/20
4/23/26, 1:43 PM [Link]
Figura 7
É importante notar então, que não há apenas um valor de atraso e um de deslocamento para cada servidor,
mas um conjunto deles, provenientes das diversas trocas de mensagem! A partir dessa lista de valores, o
Algorítmo de Filtro de Relógio calcula então um valor de atraso (delay), de deslocamento (offset) e de
variação (jitter).
Na verdade, cada amostra é composta de 4 valores: atraso, deslocamento, dispersão e estampa de tempo. A
estampa de tempo indica quando a amostra chegou. A dispersão é o erro estimado do relógio de servidor
remoto, informada pelo servidor na mensagem NTP.
A lista com os valores é ordenada em função do atraso. Considera-se que as amostras com menor atraso são
melhores porque provavelmente não se sujeitaram a filas nos switches e roteadores, de forma que parte das
variações estocásticas de tempo no envio e recebimento das mensagens é evitada com essa escolha.
Os valores mais antigos são descartados, porque o valor de deslocamento pode não mais corresponder à
realidade, já que a exatidão do relógio local varia ao longo do tempo.
Após descartar as amostras antigas, resta uma lista com as amostras mais recentes e ordenadas em função do
atraso. Da primeira entrada dessa lista são retiradas as variáveis atraso e deslocamento para o par cliente
servidor (note-se que para cada par cliente - servidor há uma variável de cada tipo).
[Link] 10/20
4/23/26, 1:43 PM [Link]
Os valores para cada servidor associado podem ser consultados no NTP conforme o exemplo a seguir, que
detalha os valores para o primeiro servidor da lista:
# ntpq
ntpq> pe
ntpq> rv &1
Voltar
Para a seleção dos relógios, o NTP considera como verdadeiro o deslocamento que se encontra dentro de um
determinado intervalo de confiança, representado na Figura 8. Esse intervalo é calculado, para cada
associação com um servidor, como:
[Link] 11/20
4/23/26, 1:43 PM [Link]
Figura 8
A Seleção de relógios busca um intervalo de intersecção para os valores de deslocamento de cada servidor,
considerados os intervalos de confiança. Os servidores cujos deslocamentos ficam fora da intersecção são
relógios falsos. A Figura 9 ilustra isso para 4 servidores, A, B e C são relógios verdadeiros, e D é um relógio
falso:
Figura 9
Ao consultar-se a lista de servidores do NTP, os relógios falsos são identificados por um "x". No exemplo
abaixo, o servidor6 é um relógio falso (esses símbolos, como o "x", usados para diferenciar os servidores, são
chamados de tally-codes, para mais detalhes deve-se consultar a seção Configurações Avançadas
([Link]).):
usuario@[Link]:~$ ntpq -p
remote refid st t when poll reach delay offset jitter
======================================================================
-servidor1 .IRIG. 1 u 8 32 377 0.407 0.248 0.016
-servidor2 .GPS. 1 u - 32 377 0.474 0.213 0.019
+servidor3 .GPS. 1 u 9 64 377 15.680 -0.005 0.026
+servidor4 .IRIG. 1 u 30 64 377 15.582 0.004 0.100
*servidor5 .GPS. 1 u 10 32 377 0.400 -0.026 0.049
xservidor6 .IRIG. 1 u 26 64 377 7.824 9.923 0.367
-servidor7 .ACTS. 1 u 13 64 377 202.274 2.459 0.309
Voltar
[Link] 12/20
4/23/26, 1:43 PM [Link]
O Algorítmo de Agrupamento
O algorítmo de Agrupamento trabalha com os servidores que são relógios verdadeiros, utilizando técnicas
estatísticas, com o objetivo de selecionar os melhores dentre eles. Os critérios de seleção utilizados são:
estrato (stratum)
distância para a raiz
variação (jitter)
No processo alguns servidores são descartados, sendo chamados de relógios afastados (outlyers). Os que
permanecem são chamados de relógios sobreviventes (survivors), algumas vezes na literatura em inglês
utiliza-se candidatos (candidates) no mesmo sentido que sobreviventes, por conta do algorítmo utilizado onde,
à princípio, todos os relógios verdadeiros são candidatos, mas apenas alguns sobrevivem.
O melhor dos relógios sobreviventes é considerado como par do sistema (system peer).
Na consulta abaixo, o par do sistema é indicado pelo "*" (em verde); os relógios sobreviventes por "+" (em
azul); e os relógios afastados por "-" (em laranja) (esses símbolos, como o "*", "+" e "-", usados para
diferenciar os servidores, são chamados de tally-codes, para mais detalhes deve-se consultar a seção
Configurações Avançadas ([Link]).):
usuario@[Link]:~$ ntpq -p
remote refid st t when poll reach delay offset jitter
======================================================================
-servidor1 .IRIG. 1 u 8 32 377 0.407 0.248 0.016
-servidor2 .GPS. 1 u - 32 377 0.474 0.213 0.019
+servidor3 .GPS. 1 u 9 64 377 15.680 -0.005 0.026
+servidor4 .IRIG. 1 u 30 64 377 15.582 0.004 0.100
*servidor5 .GPS. 1 u 10 32 377 0.400 -0.026 0.049
xservidor6 .IRIG. 1 u 26 64 377 7.824 9.923 0.367
-servidor7 .ACTS. 1 u 13 64 377 202.274 2.459 0.309
Voltar
Para os demais casos, quando há mais do que um sobrevivente e nenhum deles foi configurado com a palavra
chave prefer , o algorítmo de Combinação de Relógios calcula uma média ponderada dos deslocamentos dos
relógios, com o objetivo de aumentar a exatidão.
[Link] 13/20
4/23/26, 1:43 PM [Link]
usuario@[Link]:~$ ntpq
ntpq> pe
remote refid st t when poll reach delay
========================================================================================
+[Link] .ONBR. 1 8 93 256 377 1.3075
-[Link] .ONBR. 1 8 72 256 377 15.6619
-[Link] [Link] 2 5 874 256 210 9.4701 -
+[Link] .ONBR. 1 8 25 256 377 9.6502 -
*[Link] .GPS. 1 8 137 256 377 1.3452
-[Link] [Link] 3 8 124 256 377 115.6751 -
-[Link] [Link] 2 8 72 256 377 195.3548 -
ntpq> rl
associd=0 status=0015 leap_none, sync_unspec, 1 event, clock_sync,
leap=00, stratum=2, precision=-23, rootdelay=1.345, rootdisp=29.464, refid=[Link]
peer=17771, offset=0.025247, frequency=-0.205963, sys_jitter=0.082688, clk_jitter=1.0207
processor="x86_64", system="Linux/5.10.0-10-amd64", version="ntpd ntpsec-1.2.0 2021-06-1
expire="2022-06-28T", mintc=0
No exemplo a seguir, apesar de haver 3 sobreviventes, foi usada a palavra chave prefer na configuração do
[Link]. Como ele é um dos sobreviventes, foi escolhido como par do sistema e é o único responsável
pelos parâmetros de sincronização. Nesse caso, o algorítmo de Combinação de Relógios não é utilizado:
usuario@[Link]:~$ ntpq
ntpq> pe
remote refid st t when poll reach delay
========================================================================================
*[Link] .ONBR. 1 8 37 64 377 1.2229
-[Link] .ONBR. 1 8 36 64 377 16.4064 -
[Link] [Link] 2 6 182 64 104 9.2609
+[Link] .ONBR. 1 8 26 64 377 9.5379 -
+[Link] .GPS. 1 8 37 64 377 1.3029
-[Link] [Link] 3 8 32 64 377 115.4933 -
-[Link] [Link] 2 8 35 64 377 195.3971 -
ntpq> rl
associd=0 status=0015 leap_none, sync_unspec, 1 event, clock_sync,
leap=00, stratum=2, precision=-24, rootdelay=1.223, rootdisp=3.962, refid=[Link],
peer=17767, offset=0.068553, frequency=-0.265198, sys_jitter=0.036016, clk_jitter=0.0355
processor="x86_64", system="Linux/5.10.0-10-amd64", version="ntpd ntpsec-1.2.0 2021-06-1
expire="2022-06-28T", mintc=0
Voltar
[Link] 14/20
4/23/26, 1:43 PM [Link]
O controle baseado em fase é melhor para as ocasiões onde há uma grande variação (jitter). Essa abordagem
procura minimizar o erro no tempo, controlando indiretamente a freqüência.
O controle baseado em freqüência é melhor para quando há instabilidades na freqüência (variações mais lentas
que o jitter, conhecidas como wander). A abordagem controla diretamente a freqüência, e indiretamente o erro
no tempo.
O NTP disciplina o relógio local de forma contínua, mesmo em períodos onde não é possível consultar
servidores de tempo. As características do relógio local são medidas e se tornam conhecidas do NTP, o que
torna possível que ele funcione dessa forma. O arquivo indicado pela chave driftfile (geralmente
/var/lib/ntpsec/[Link] ) na configuração armazena o erro esperado de freqüência para o relógio.
Saltos no tempo são evitados sempre que possível. O tempo é ajustado para mais ou para menos
gradualmente, variando-se a freqüência do relógio local.
Se uma diferença maior do que 128ms for detectada o NTP considera que o tempo está muito errado, e
que é necessário um salto para frente ou para trás para corrigi-lo. Contudo isso só é feito se essa
diferença maior que 128ms persistir por um período maior que 900s (15min), para evitar que condições
de congestionamento grave mas temporário na rede, que podem levar a medições erradas de tempo,
causem inadvertidamente esse tipo de salto.
Se uma diferença maior que 1000s (~16,7min) for detectada o algorítmo aborta a execução,
considerando que algo muito errado aconteceu. Se houver diferenças dessa ordem ou maiores elas
devem ser corrigidas manualmente antes de se executar o daemon NTP.
Voltar
[Link] 15/20
4/23/26, 1:43 PM [Link]
NTS e Segurança
Por segurança no contexto da Tecnologia da Informação entende-se basicamente garantir quatro propriedades
da informação:
integridade,
disponibilidade,
autenticidade e
confidencialidade.
Os algorítmos vistos anteriormente, aliados à correta configuração do sistema, com um número suficiente de
fontes de tempo com referências primárias independentes, garantem de forma satisfatória a integridade e
disponibilidade do serviço de tempo.
Os algorítimos de criptografia abordados neste item visam garantir a autenticidade da informação. Ou seja,
têm o objetivo de assegurar ao cliente de que o servidor é quem ele diz ser.
1. o tempo é uma informação pública, não há razão para esconder essa informação;
2. trabalhar com a informação de tempo cifrada demandaria tempo tanto do servidor quando do cliente e
degradaria o desempenho do sistema, fazendo-o menos exato.
Foram especificados 3 métodos no NTP para realizar a autenticação, chave simétrica (symmetric key) e chave
pública com (autokey) e NTS, que também usa chave pública.
Quando o daemon NTP é iniciado, ele lê o arquivo de chaves especificado pelo comando keys no arquivo de
configuração e armazena-as num cache. Cada chave deve ser ativada com o comando trustedkey antes de
ser usada. Isso pode ser feito também com o programa em funcionamento, utilizando o ntpq (na
implementação legada de referência isso era feito pelo comando ntpdc que não existe mais no ntpsec).
O arquivo de chaves pode conter várias chaves, uma em cada linha. Cada linha tem 3 colunas. A primeira é o
número da chave, entre 1 e 65535. A segunda é o tipo da chave; recomenda-se utilizar M para MD5, que é
representada por uma seqüência de até 31 caracteres ASCII (A versão 3 do NTP suportava também DES, mas
além de ser pior, há problemas legais nos Estados Unidos, que consideram programas utilizando DES como
munição, proibindo sua exportação). A terceira é a chave em si. Exemplo de arquivo com chaves:
[Link] 16/20
4/23/26, 1:43 PM [Link]
1 M ABCDEFGHIJLMJNOPQRST
2 M ESSAEHUMACHAVEMD5VALIDA
3 M ESSAEHUMACHAVEMD5VALIDATB
15 M 1234ACDAS@#$LKAS)KJDKASH
498 M NTPv4.98
A autenticação por chave simétrica funciona bem, é suportada por uma grande variedade de dispositivos,
mesmo antigos, e pode ser usada. O grande problema é que ela não traz consigo uma forma para distribuição
das chaves. Ou seja, servidor e cliente devem ter configurada e confiar na mesma chave. Ela precisa estar
configurada tanto no servidor, como no cliente.
Essa distribuição deve ser feita de forma segura, garantindo que não haja erros ou vazamento da informação,
sob pena de toda a segurança extra provida pelo recurso ser perdida. Normalmente isso é feito de forma
manual. O NIST, por exemplo, que é uma das instituições responsáveis por manter os padrões de tempo e
frequência nos Estados Unidos, suporta as chaves simétricas em seu serviço de NTP: eles recebem as
requisições por correio (correio, físico, cartas em papel) ou fax e enviam a chave simétrica a ser utilizada
também por carta.
O Autokey foi um fracasso completo. Ele está documentado na RFC 5906, que é uma RFC informational,
ou seja, não especifica realmente um padrão. Hoje o Autokey é considerado obsoleto. Não deve ser
usado. Os softwares modernos para NTP não o suportam mais. Esse fracasso se deu por inúmeras falhas
de segurança em sua concepção e implementação, restrições como não funcionar com NAT, bem como por
causa da enorme dificuldade de configuração e uso.
[Link] 17/20
4/23/26, 1:43 PM [Link]
na implementação de referência, que é um verdadeiro dinossauro, gigante, e com suporte a uma miríade
de hardwares e sistemas obsoletos e cujas opções padrão de configuração não são seguras;
há uma interdependência crescente entre o registro do tempo, a manutenção correta do tempo e a
segurança, por exemplo, considerando a necessidade dos logs com informação de data/hora corretas
para o tratamento de incidentes, ou a dependência de algorítmos de criptografia e mecanismos de login
do relógio correto;
há hoje requisitos legais e de conformidade que exigem ou dependem da manutenção e registro corretos
do tempo nos sistemas;
Ataques bem sucedidos ao NTP podem ser catastróficos, afetando uma infinidade de sistemas. Por exemplo,
se um ataque NTP conseguir fazer um cliente voltar no tempo, ele pode aceitar certificados TLS fraudados.
Certificados TLS são usados para estabeler conexões que deveriam ser seguras e autenticadas na Internet,
mas houve já falhas de segurança que permitiram a emissão de certificados falsos no passado, como o
heartbleed. Em relação ao DNSSEC, se um resolver estiver configurado para fazer strict validation um ataque
NTP que leve o relógio para o futuro pode fazer com que todos os certificados e chaves expirem. Um ataque
que leve para o passado pode facilitar ataques de repetição. Muitos sistemas hoje usam algum tipo de cache, o
próprio DNS, por exemplo. Um ataque NTP que leve o relógio para trás apenas 24h pode fazer com que as
entradas de cache expirem, inundando a rede de novas requisições. Um ataque NTP poderia afetar o RPKI e a
segurança do BGP, por exemplo levando um validador para frente no tempo e fazendo com que apague o
arquivo de manifesto e depois fazendo-o voltar e aceitando um manifesto antigo como válido. No Bitcoin um
ataque NTP pode levar uma vítima a rejeitar transações válidas, ou a gastar poder computacional processando
transações antigas. Há inúmeros exemplos da gravidade dos riscos de ataques bem sucedidos aos relógios
dos sistemas. Essa deveria ser uma motivação muito séria para todos.
Um grupo de trabalho foi criado em 2015, no IETF, para tratar a situação, tendo concluído o trabalho de
padronização de uma nova extensão de segurança para o NTP em setembro de 2020. Ela se chama NTS ,
sigla para Network Time Security.
O NTS é um mecanismo para usar TLS para prover segurança criptográfica para o NTP no modo
cliente/servidor. TLS é o mesmo mecanismo de segurança, baseado em chaves públicas, amplamente
utilizado na web, para garantir a autenticidade dos sites usando o protoco https. Confiável e amplamente
conhecido e utilizado pela comunidade técnica.
NTS-KE - Network time Security Key Establishment: Um mecanismo que permite a autenticação do
servidor pelo cliente e a troca de parâmetros de segurança que serão usados depois efetivamente na
troca de informações NTP;
NTS Extension fields for NTPv4: extensão do protocolo NTP que permite a autenticação dos pacotes e
outros tipos de proteção;
O NTS provê, por meio do NTS-KE e das extensões NTS para o NTPv4:
[Link] 18/20
4/23/26, 1:43 PM [Link]
Escalabilidade: os servidores não guardam estado dos clientes, então podem servir a um grande
número deles;
Desempenho: o NTS não degrada a qualidade da sincronização dos relógios, ou seja, não piora a
precisão/exatidão do NTP;
O primeiro passo é o NTS-KE: o cliente conecta-sa na porta TCP 4460 do servidor. Cliente e servidor executam
um handshake TLs e negociam alguns parâmetros de segurança extras. O Servidor envia então ao cliente
alguns cookies que serão usados na posterior troca de mensagens via protocolo NTP, envia também o IP e
porta do servidor NTP para o qual os cookies são válidos. Nessa altura a fase NTS-KE do protocolo termina.
Idealmente o cliente nunca mais precisa se conectar no servidor NTS-KE e pode seguir trocando pacotes NTP.
Contudo em alguns casos esse processo pode ser repetido.
Após terminada a fase NTS-KE se inicia a efetiva sincronização com NTP e NTS. O cliente envia ao servidor
um pacote NTP com vários campos de extensão, entre eles um cookie dos que recebeu do servidor NTS-KE e
uma tag de autenticação. O servidor usa o cookie para recuperar a chave criptográfica e envia uma resposta
autenticada. A resposta inclui um cookie, criptografado. Na próxima requisição o cliente enviará esse cookie,
mas sem criptografia. Essa constante renovação dos cookies garante a privacidade.
O uso do NTS é recomendado sempre que possível. Em particular para servidores o uso de NTS é bastante
importante. Caso o sistema operacional ainda não tenha um cliente com suporte a NTS, por exemplo no caso
de servidores Windows, ou equipamentos de rede, é recomendável que este equipamento seja cliente de
servidores NTP na rede local, estes por sua vez funcionando como clientes do [Link], utilizando NTS.
Voltar
(1)Uma importante referência para esta página, inclusive a partir da qual algumas figuras foram
adaptadas, foi: TORRES JÚNIOR, PEDRO R. Caracterização da Rede de Sincronização na Internet.
Dissertação de Mestrado. 2007. Universidade Federal do Paraná. Curitiba.
[Link] 19/20
4/23/26, 1:43 PM [Link]
([Link]
O conteúdo publicado no site [Link] está licenciado com a Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional
([Link] a menos que condições e/ou restrições adicionais específicas estejam
claramente explícitas na página correspondente.
Núcleo de Informação e Coordenação do Ponto BR ([Link]) CNPJ 05.506.560/0001-36
[Link] 20/20