
2 Clocks and clock skews
When discussing clocks and clock skews, we build on
the nomenclature from the NTP specification [19] and from
Paxson [22]. A clock Cis designed to represent the amount
of time that has passed since some initial time i[C].Clock
C’s resolution,r[C], is the smallest unit by which the clock
can be incremented, and we refer to each such increment
as a tick. A resolution of 10 ms means that the clock is de-
signed to have 10 ms granularity, not that the clock is always
incremented exactly every10ms. ClockC’s intended fre-
quency,Hz[C], is the inverse of its resolution; e.g., a clock
with 10 ms granularity is designed to run at 100 Hz. For
all t≥i[C],letR[C](t)denote the time reported by clock
Cat time t,wheretdenotes the true time as defined by
national standards. The offset of clock C,off[C], is the dif-
ference between the time reported by Cand the true time,
i.e., off[C](t)=R[C](t)−tfor all t≥i[C]. A clock’s
skew,s[C], is the first derivative of its offset with respect to
time, where we assume for simplicity of notation that R[C]
is a differentiable function in t. We report skew estimates in
microseconds per second (µs/s) or, equivalently, parts per
million (ppm). As we shall show, and as others have also
concluded [22, 20, 26], it is often reasonable to assume that
a clock’s skew is constant. When the clock in question is
clear from context, we shall remove the parameter Cfrom
our notation; e.g., s[C]becomes s.
A given device can have multiple, possibly independent,
clocks. For remote physical device fingerprinting, we ex-
ploit two different clocks: the clock corresponding to a de-
vice’s system time, and a clock internal to a device’s TCP
network stack, which we call the device’s TCP timestamps
option clock or TSopt clock. We do not consider the hard-
ware bases for these clocks here since our focus is not on
understanding why these clocks have skews, but on exploit-
ing the fact these clocks can have measurable skews on pop-
ular current-generation systems.
THE SYSTEM CLOCK. To most users of a computer sys-
tem, the most visible clock is the device’s system clock,
Csys, which is designed to record the amount of time since
00:00:00 UTC, January 1, 1970. Although the system
clocks on professionally administered machines are often
approximately synchronized with true time via NTP [19]
or, less accurately, via SNTP [18], we stress that it is much
less likely for the system clocks on non-professionally man-
aged machines to be externally synchronized. This lack of
synchronization is because the default installations of most
of the popular operating systems that we tested do not syn-
chronize the hosts’ system clocks with true time or, if they
do, they do so only infrequently. For example, default Win-
dows XP Professional installations only synchronize their
system times with Microsoft’s NTP server when they boot
and once a week thereafter. Default Red Hat 9.0 Linux
installations do not use NTP by default, though they do
present the user with the option of entering an NTP server.
Default Debian 3.0, FreeBSD 5.2.1, and OpenBSD 3.5 sys-
tems, at least under the configurations that we selected (e.g.,
“typical user”), do not even present the user with the op-
tion of installing ntpd. For such a non-professionally-
administered machine, if an adversary can learn the values
of the machine’s system clock at multiple points in time,
the adversary will be able to infer information about the de-
vice’s system clock skew,s[Csys].
THE TCP TIMESTAMPS OPTION CLOCK. RFC 1323 [13]
specifies the TCP timestamps option to the TCP protocol.
A TCP flow will use the TCP timestamps option if the net-
work stacks on both ends of the flow implement the option
and if the initiator of the flow includes the option in the
initial SYN packet. All modern operating systems that we
tested implement the TCP timestamps option. Of the sys-
tems we tested, Microsoft Windows 2000 and XP are the
only ones that do not include the TCP timestamps option in
the initial SYN packet (Microsoft Windows Pocket PC 2002
does include the option when initiating TCP flows). In Sec-
tion 3 we introduce a trick for making Windows 2000- and
XP-initiated flows use the TCP timestamps option.
For physical device fingerprinting, the most important
property of the TCP timestamps option is that if a flow uses
the option, then a portion of the header of each TCP packet
in that flow will contain a 32-bit timestamp generated by
the creator of that packet. The RFC does not dictate what
values the timestamps should take, but does say that the
timestamps should be taken from a “virtual clock” that is “at
least approximately proportionalto real time [13];” the RFC
1323 PAWS algorithm does stipulate (Section 4.2.2) that the
resolution of this virtual clock be between 1 ms and 1 sec-
ond. We refer to this “virtual clock” as the device’s TCP
timestamps option clock, or its TSopt clock Ctcp . There is no
requirement that a device’s TSopt clock and its system clock
be correlated. Moreover, for popular operating systems like
Windows XP, Linux, and FreeBSD, a device’s TSopt clock
may be unaffected by adjustments to the device’s system
clock via NTP. To sample some popular operating systems,
standard Red Hat 9.0 and Debian 3.0 Linux distributions2
and FreeBSD 5.2.1 machines have TSopt clocks with 10 ms
resolution, OS X Panther and OpenBSD 3.5 machines have
TSopt clocks with 500 ms resolution, and Microsoft Win-
dows 2000, XP, and Pocket PC 2002 systems have TSopt
clocks with 100 ms resolution. Most systems reset their
TSopt clock to zero upon reboot; on these systems i[Ctcp]
is the time at which the system booted. If an adversary can
learn the values of a device’s TSopt clock at multiple points
in time, then the adversary may be able to infer information
about the device’s TSopt clock skew,s[Ctcp].
2We do not generalize this to all Linux distributions since Knoppix 3.6,
with the 2.6.7 experimental kernel, has 1 ms resolution.