<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title>The Italian Conference on CyberSecurity, April</journal-title>
      </journal-title-group>
      <issn pub-type="ppub">1613-0073</issn>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Timing Side-Channel Attacks on USB Devices Using eBPF</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Gianmarco Lusvardi</string-name>
          <email>gianmarco.lusvardi@unimore.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Luca Ferretti</string-name>
          <email>luca.ferretti@unimore.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Mauro Andreolini</string-name>
          <email>mauro.andreolini@unimore.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Workshop</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Timing Attack</institution>
          ,
          <addr-line>eBPF, USB, Digital Signatures, Smart Card</addr-line>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>University of Modena and Reggio Emilia</institution>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2024</year>
      </pub-date>
      <volume>0</volume>
      <fpage>8</fpage>
      <lpage>12</lpage>
      <abstract>
        <p>Timing side-channel attacks allow to infer information processed by an algorithm from its execution times. The impact of these attacks in cryptography has been proven in several real-world scenarios, such as the compromise of private keys associated to digital signature systems deployed in local or remote systems. Collecting precise timings is paramount to maximize attacks efectiveness, that is, to increase the probability of recovering the private keys. In this paper, we investigate the feasibility of collecting high-precision timings of cryptographic algorithms executed on embedded devices by leveraging a normal personal computer. We focus on digital signatures and on devices accessed via USB, such as smart cards and authentication tokens. To this end, we study the possibility of measuring signatures timings by using the extended Berkeley Packet Filter (eBPF), a technology that allows to develop programs which are executed in kernel space, to develop a program to measure timings related to data exchanges between the host and USB devices directly in kernel space. We evaluate the efectiveness of the approach by crafting a testbed based on a vulnerable smart card. We collect and compare measurements taken both in user and in kernel space, and we analyze their eficacy when used as inputs to a known mathematical heuristic used for recovering the private keys. Experimental results show that the proposed approach increases the precision of collected timings and the probability of running a successful attack in most cases.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        When any kind of program is run on a computer, in addition to the desired output it also produces
side-efects on the physical environment, such as running time or power consumption. Measurements
of such efects when they depend on some secret parameter may allow an adversary to recover the secret
through a so-called side-channel attack. Side-channel attacks have been extensively studied in literature
and may be based on many types of information, algorithms, platforms and interfaces [
        <xref ref-type="bibr" rid="ref1 ref2 ref3 ref4 ref5 ref6">1, 2, 3, 4, 5, 6</xref>
        ].
      </p>
      <p>
        We focus on timing side-channel attacks on cryptographic schemes, where adversaries measure
execution times of algorithms which may depend on a secret key. Although the need for implementing
such schemes with algorithms that are time-constant with regards to secret information is well-known
in cryptographic engineering, vulnerabilities may still raise due to human errors (e.g., inexperienced
developers) or to subtle optimizations operated by compilers [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. To the aim of detecting and
exploiting timing side-channel vulnerabilities, collecting precise timings is paramount to maximize attacks
efectiveness [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
      </p>
      <p>In this paper, we investigate the feasibility of collecting high-precision timings of cryptographic
algorithms executed on embedded devices by leveraging a normal personal computer, without any
special equipment. We focus on digital signatures and on devices accessed via USB, such as smart cards
and authentication tokens. In order to perform a successful timing side-channel attack, we need a very
precise clock that can measure the running time of the targeted implementation in order to filter out as
much measurement noise as possible and pick up any diference in time taken by the program with
diferent inputs. The USB protocol may introduce quantization in timing measurements, which can
pose a serious problem for such attacks, because it has the efect of reducing the precision of the clock
used for measuring.
(M. Andreolini)</p>
      <p>CEUR</p>
      <p>ceur-ws.org</p>
      <sec id="sec-1-1">
        <title>User space</title>
      </sec>
      <sec id="sec-1-2">
        <title>Software</title>
      </sec>
      <sec id="sec-1-3">
        <title>Operating</title>
      </sec>
      <sec id="sec-1-4">
        <title>System</title>
      </sec>
      <sec id="sec-1-5">
        <title>USB Host</title>
      </sec>
      <sec id="sec-1-6">
        <title>Controller</title>
        <p>Device</p>
      </sec>
      <sec id="sec-1-7">
        <title>Endpoint</title>
        <p>Our contribution is twofold. First, we study the possibility of measuring signatures timings by
using extended Berkeley Packet Filter (eBPF), a technology that allows to develop programs which are
executed in kernel space and are typically associated to system events, and develop a program that
measures timings related to data exchanges between the host and USB devices directly in kernel space.
Measuring timings in kernel space allows us to reduce the measurement noise introduced by process
scheduling and bufering.</p>
        <p>
          Second, we design an experimental testbed to evaluate the eficacy of the measurements. We leverage
a USB Armory Mk-II device [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ], which is a security-focused Single-Board Computer (SBC) provided
with USB device emulation features, flashed with the GoKey firmware [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] supporting the OpenPGP
protocol [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ], that we modified to make it vulnerable to a known timing side-channel attack [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]. The
testbed allows us to compare timings at diferent abstraction layers and analyze how noise introduced at
multiple levels afect the eficacy of a known heuristic used for recovering the private key. Experiments
show that not only it is feasible to detect timing diferences despite the time quantization introduced by
the host-centric nature of USB, but also that they are exploitable for performing a successful attack.
Moreover, measuring signature timings in kernel space by using eBPF improves the precision of
the timing measurements, allowing an adversary to increase the attack success probability with less
signatures.
        </p>
        <p>The paper is organized as follows. Section 2 describes base knowledge on the USB protocol, eBPF and
lattice attacks for key recovery. Section 3 discusses how to collect timings at the kernel level through
eBPF. Section 4 describes the experimental testbed. Section 5 presents experimental results. Section 6
discusses concluding remarks and future work.</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>2. Base knowledge</title>
      <p>
        We discuss base knowledge on the USB protocol in Section 2.1, extended Berkley Packet Filter (eBPF) in
Section 2.2, and lattice attacks for key recovery in Section 2.3.
2.1. USB
The Universal Serial Bus (USB) standard allows external peripherals to be connected to a host computer
to increase its capabilities. We focus on version 2.0 of the USB standard [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], whose architecture and
data flow is outlined in Figure 1. The protocol operates between a USB host, such as a normal personal
computer, and a USB device, such as a storage device or, as in our case, a smart card. The host runs
user space software on an operating system, which provides the necessary drivers for accessing USB
devices. In turn, those drivers use the host controller driver to access the host controller, which is
hardware responsible for implementing USB communications with USB devices. Each device exposes
its functionalities through one or more endpoints, which represent the source or sink of any USB data
transfer. Ultimately, the logical flow of information is between a client software and an endpoint of
a USB device. Each endpoint is identified by an
      </p>
      <p>endpoint address, which is composed of an endpoint
number and an endpoint direction [11, Chapter 2, 5.3].</p>
      <p>The USB protocol is host-centric, which means that it is always the host that initiates every data
transfer, even the ones from the device to the host [11, Section 4.4]. This may afect timing attacks
because it introduces an upper bound on the rate at which the endpoint is polled for new data, hence it
may also introduce dangerous quantization in time measurements. Another aspect which may influence
the quantization is the type of particular data transfer that an endpoint uses.</p>
      <p>
        We focus on bulk transfers because they are commonly used for USB smart cards, as they are designed
to support the transfer of relatively large data bursts [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. Bulk transfers ofer no guarantees over
bandwidth or latency of the communications [11, Sections 4.7, 5.4]. In order to perform a data transfer
(called a transaction in USB) with bulk endpoints, the host specifies the direction of the data transfer
through a token packet, which can be an IN token or an OUT token, respectively if the direction of the
data transfer is from the device to the host, namely an IN transaction, or vice versa, namely an OUT
transaction [11, Section 8.5.2].
      </p>
      <p>• for IN transactions, the IN token includes the destination endpoint, such that the device may reply
with a DATA packet back to the host. The device may answer with a NAK packet for declaring
that there is no data to be sent.
• for OUT transactions, the host send a DATA packet after sending the OUT token. The device
replies with an handshake packet (ACK, NAK or STALL) depending on its current state.</p>
      <sec id="sec-2-1">
        <title>2.2. Extended Berkeley Packet Filter (eBPF)</title>
        <p>
          The eBPF technology can be used for running limited sandboxed programs in the kernel space of a Linux
operating system, without the need to patch and recompile the kernel. An eBPF program can be usually
written in a relatively high-level language, such as C, which then gets compiled into eBPF bytecode,
and loaded at runtime attached to a specific hook point, to inspect the execution of a particular kernel
function when a system event occurs and to report results back to user space programs. eBPF programs
have access to a limited set of helper functions ofered by the kernel and to a very limited stack size [ 13,
Documentation/bpf/bpf_design_QA.rst]. Thus, it is only possible to rely on them for very simple
operations, such as tracing kernel functions, which fits our aim of measuring timings [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ].
        </p>
      </sec>
      <sec id="sec-2-2">
        <title>2.3. Lattice attacks for key recovery</title>
        <p>
          A lattice attack is a mathematical heuristic based on the hidden number problem capable of recovering the
(EC)DSA private key from a limited amount of signatures generated by using biased nonce values [
          <xref ref-type="bibr" rid="ref1 ref2">1, 2</xref>
          ].
This is the second part of the Brumley and Tuveri’s attack [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] that we reproduce in this paper.
the n-dimensional lattice that it generates is1
        </p>
        <p>A lattice is an integer vector space with coeficients in
ℤ. Given an ordered base (b1, … , b ) ∈ ℤ ,

=1
ℒ (b1, … , b ) = {∑   b ∶   ∈ ℤ}
(1)</p>
        <p>Let {ℎ1, … , ℎ } be a set of messages and let {(  ,   ) ∶  = 1, … , } be the set of respective ECDSA
signatures performed with the key pair (, )
, where  is the private key and  = []
is the public
key over a specific elliptic curve where  is the generator of the ECDSA subgroup of order  used for
signing. Let {  ∶  = 1, … , } be a set of side-channel information associated to the signautres:   is
associated with the signature (  ,   ) such that ∀,  = 1, … , ,  ≠  ∶ 
 &lt;   ⇒ ⌊log2   ⌋ ≤ ⌊log2   ⌋ where
  is the nonce used for generating signature (  ,   ). Lastly, let   be the assumed number of null most
significant bits of the nonce   used for producing the signature (  ,   ) (also called leakage).
1The more rigorous name of the considered lattice is integral lattice.</p>
        <p>If we now consider the subset of  signatures with the minimum   possible, then we can consider the
lattice ℒ spanned by
 =
⎛
⎜
⎜
⎜
⎜
⎜
2 1+1
0
⋮
0
2 1+1 1</p>
        <p>0
2 2+1
⋮
0
2 2+1 2
…
…
…
…
0
0</p>
        <p>
          ⋮
2  +1
2  +1

techniques as discussed in [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ].
where   =  −1
 mod  and   =  −1ℎ
        </p>
        <p>mod  .</p>
        <p>It is possible to prove that there is a vector e = ( 1, … ,   , , )
in the lattice spanned by the matrix
in Equation 2 which is particularly short. What is interesting about the vector e is its next-to-last
element, which is the private key used for producing the signatures. Note that it is also possible that
such element is  −</p>
        <p>
          [4, Section 2.2]. A more extended analysis for this claim is reported in [
          <xref ref-type="bibr" rid="ref2 ref4">2, 4</xref>
          ]. It is
now possible to use the LLL and BKZ algorithms on the aforementioned basis of the lattice ℒ in order
to obtain an equivalent lattice which rows are possible candidates to be the vector e. The resulting
lattice is called reduced lattice. Therefore, by checking if each element in the next-to-last column of the
reduced basis is  or  −
        </p>
        <p>
          by multiplying each of them by  and check if the result is  , it is possible to
The lattice spanned by the matrix in Equation 2 is the result of applying the embedding and recentering
In order to perform a lattice attack, we need to assign values to the leakages   . It would be possible to
assign diferent values to each   depending on what we expect from the particular setup (as it has been
done in [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ] with geometric bounds) or simply to assign the same value to all the   :  1 =  2 = ⋯ =   =  .
The less the leakage we assume, the more signatures we require to add to the lattice in order to perform
a successful attack [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ].
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. Measuring timings in eBPF</title>
      <p>
        We design an eBFP program to collect timings related to digital signatures produced by an OpenPGP
smart card connected through USB. To measure timings in eBPF, we need to decide to which kernel
function attach the eBPF program. We build upon publicly available source code developed for other
purposes (e.g. [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]) that we modify for our scenario.
      </p>
      <p>
        When a USB driver wants to initiate a data transfer, it constructs a structure named USB Request
Block (URB), which contains the data to be sent and the endpoint address among other relevant
information for the transfer, and uses the usb_submit_urb function present in the Linux kernel to
do sanity checks and to pass the control of the URB to the USB host controller driver [
        <xref ref-type="bibr" rid="ref16 ref17">16, 17</xref>
        ] [13,
drivers/usb/core/urb.c]. The host controller driver then adds the URB to a specific endpoint
queue [13, drivers/usb/core/hcd.c], from which the host controller sends the URB to the USB device.
When the host controller driver finished handling a URB, it passes the control of the URB back to the USB
device driver by calling the usb_hcd_giveback_urb function [13, drivers/usb/core/hcd.c]. Hence
this function gets called after data transfers in both directions. Therefore, in order to measure signature
timings in kernel space, we attach the eBPF program to the kernel function usb_hcd_giveback_urb.
      </p>
      <p>
        We design the eBPF program to collect relevant information contained in the URB:
• the PID:VID pair identifying a USB device [13, include/uapi/linux/usb/ch9.h], [11, Table
9.8], [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ];
• a copy of the data transferred through USB, potentially truncated to the first few bytes. The
truncation may be necessary due to the limited size of the stack allocated for eBPF programs.
The copy is needed to tell apart requests for signatures and the relative response from the USB
device: by analyzing the first bytes of the message, we can use the OpenPGP smart card standard
to understand the direction of the transfer (for more information see [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]). The full ECDSA
signature is collected by the signing program in user space;
• a timestamp collected with the eBPF helper function bpf_ktime_get_ns [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ].
      </p>
      <p>This information is then passed to the user space program that loaded the eBPF program, which
checks if the PID:VID pair is the same as the USB device, to ensure that the data comes from, or goes to,
the USB device. If so, the user space program stores the collected timestamp along with the direction of
the transaction. The set of the collected timestamps is later processed by a separate program to find out
the exact time taken for a signature to be produced by the USB device.</p>
    </sec>
    <sec id="sec-4">
      <title>4. Experimental testbed</title>
      <p>
        We design an experimental testbed for the collection of digital signature timings based on the USB
Armory MkII (or Armory for short) [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], which is a Single Board Computer (SBC) specialized for security
and cryptographic purposes. It is possible to use the Armory as a OpenPGP smart card by flashing it
with the GoKey firmware provided by the manufacturer [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], compiled with the TamaGo compiler [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ].
The Armory exposes two bulk endpoints for communicating with the host computer and be able to
sign messages, complying with the CCID standard for smart cards [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
      </p>
      <p>
        We modify the GoKey firmware [ 9, commit id 5aa37f492dc] and the TamaGo standard library (version
1.20.5) to reproduce Brumley and Tuveri’s attack against a buggy implementation of the Montgomery
ladder for computing point-scalar multiplication over elliptic curves in OpenSSL 0.9.8o [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Specifically,
the implementation leaks the number of null most significant bits of the nonce for each signature
because, when it iterates over all the bits of the nonce, it skips all the null bits at the beginning, thus
making the point-scalar multiplication of a short nonce shorter in time than the same operation for a
longer nonce. Moreover, in order to speed up signature collection we also removed the requirement of
asking for a password every time a signature is made, which would take roughly two to three seconds
of computation due to the password based key derivation function. Finally, in order to evaluate the
performance of the attack, we patched the GoKey firmware in order to report also the nonces used
for producing a signature. This is not a requirement to run a successful attack and it is not used for
retrieving the private key (which would otherwise be trivial). Instead, nonces are used for further
comparing the performances between measurements performed in kernel space and user space in order
to compute the number of errors in the analysis we do in Section 5.
      </p>
    </sec>
    <sec id="sec-5">
      <title>5. Experimental evaluation</title>
      <p>
        We evaluate the efectiveness of the kernel space timings measurements described in Section 3 within
the testbed described in the Section 4 against timings collected in user space. The user space program
collects signatures using libusb version 1.0.26 [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ]. The program issues signatures sequentially to
the Armory and collects two timestamps: one immediately after sending data to the Armory and
another one immediately after having received the relevant signature from the Armory by probing the
CLOCK_MONOTONIC system clock.
      </p>
      <p>
        Brumley and Tuveri’s attack can be split into two diferent phases: signature timing collection and
lattice attack [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. The lattice attack provides us a simple benchmark for the timing collection process
because its success or failure depends on the goodness of the timing collection.
      </p>
      <p>The first thing that we assess is whether the timing leakage is measurable despite the time quantization
introduced by the USB protocol. In order to do that, we use a constant nonce for signing operations
in the GoKey firmware with a known number of null most significant bits from 0 to 12 and then we
collected 5000 signatures for each value of the nonce, measuring the time each signature took both on
the Armory and on the host in kernel space. Timings collected locally on the Armory are plotted in
Figure 2 and corresponding timing measurements in kernel space on the host are plotted in Figure 3. It
can be observed that in both cases there is an almost linear dependence between the running time and
the length of the nonce.
32.00
31.75
31.50
31.25
31.00
30.75
30.50
30.25
30.00
29.75
29.50
29.25
29.00
28.75
28.50
28.25
28.00
27.75
27.50
27.25
27.00
26.75
26.50
26.25
26.00
12
11
10
9
8
7
6
5
4
3
2
1
0</p>
      <p>In order to evaluate the performance of the lattice attack with respect to the measuring method, we
issue 10000 signatures with 25 diferent private keys to the Armory while collecting both the user space
and kernel space timings, and the nonce used for producing each signature.</p>
      <p>We then compare the two timing collection methods in two ways: first, we compare the percentage
of lattice attacks that succeed when sorting respectively by user and kernel space timings; second, we
take a reference number of signatures for building the lattice and then compare the average number
of errors made by sorting by user and kernel space timings. Errors are defined as signatures with an
amount of leakage that is smaller than the assumed value.</p>
      <p>In order to perform the lattice attack (see Section 2.3 for the notation), we consider a fixed value of the
leakage  = 5 and a varying number  of signatures used for building the lattice. We build the lattice by
ordering the entire set of 10000 signatures by user and kernel space timings and perform the attack with
Kernelspace</p>
      <p>Userspace
52
54
56
58</p>
      <p>
        60 62
Number of signatures in lattice
64
66
68
70
both types of timings. The lattice reduction performed within the attack first uses the LLL algorithm and,
in case of failure, it is retried with the BKZ algorithm with block sizes {15, 20, 30, 40, 45, 48, 51, 53, 55}
as in [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. Then we repeat the same procedure only by using the last 5500 signatures of all the 10000
unsorted collected signatures, without reshufling. We compare the performance of the lattice attack
for 10000 and 5500 collected signatures respectively in Figures 4 and 5. Results in Figure 4 show that
when leveraging a dataset with a very high number of signatures, the success probability improvement
is very small because the increased noise is filtered out by the high amount of samples. Instead, results
in Figure 5 show that with kernel space timings it is possible to collect less signatures and still perform
10000
9500
9000
8500
8000
7500
7000
6500
6000
5500
5000
4500
4000
3500
3000
2500
2000
1500
1000
500
      </p>
      <p>0
a lattice attack with a high probability of success. By comparing kernel timings between 5500 and
10000 signatures, the probability of the attack succeeding with a number of signatures within the lattice
ranging from 54 to 58 is higher by using the subsampled dataset with 5500 signatures than by using
the whole dataset with 10000 signatures. This may be due to the fact that increasing the number of
signatures also increases the number of signatures computed on nonces with a higher number of null
most significant bits than assumed. We leave improved analyses as future work.</p>
      <p>In order to perform the second analysis, we take  4 = 88 and  5 = 60 as a reference number of
signatures assuming a leakage of respectively 4 and 5 bits. Then, we select the first  collected signatures
to simulate the collection of less than 10000 signatures and we sort such subset by user and kernel
space timings. After that we select the first   signatures in each subset, where   is defined as above.
Finally, we average the amount of errors over the 25 tests we performed and plot the results in Figure 6.
The plot assigns the average amount of errors in the first   signatures (computed over all the 25 tests)
to each number  of signatures collected. From the plot we can see that, given a number of collected
signatures  , the average amount of errors made by sorting by user space timings is always greater than
or equal to the average amount of errors made by sorting by kernel space timings. Thus, measuring
timings in kernel space increases their precision.</p>
    </sec>
    <sec id="sec-6">
      <title>6. Conclusions</title>
      <p>We showed that it is possible to perform timing attacks on USB smart cards through a normal personal
computer. Moreover, the use of eBPF allows to increase the precision of timing measurements over USB,
avoiding noise introduced by other operating system components or user space programs, without the
need to write a kernel module or patch the kernel. The proposed approach allows to assess the security
of USB smart cards and similar devices against timing side-channel attacks with greater confidence,
even without specialized hardware. Future work will include further analyses of USB timing attacks
in diferent scenarios, including other kinds of USB devices and cryptographic protocols, and probing
other kernel functions that may allow more precise timing measurements.
This work has been supported by the project “C4SI” funded by the Emilia Romagna Region (Fondo
Europeo di Sviluppo Regionale - FESR) - CUP E67G22000630003.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>B. B.</given-names>
            <surname>Brumley</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Tuveri</surname>
          </string-name>
          , Remote Timing Attacks Are Still Practical,
          <source>in: 16th European Symp. Research in Computer Security (ESORICS)</source>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>J.</given-names>
            <surname>Jancar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Sedlacek</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Svenda</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Sys</surname>
          </string-name>
          ,
          <article-title>Minerva: The curse of ECDSA nonces (Systematic analysis of lattice attacks on noisy leakage of bit-length of ECDSA nonces)</article-title>
          ,
          <source>IACR Trans. Cryptographic Hardware and Embedded Systems</source>
          (
          <year>2020</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>D.</given-names>
            <surname>Moghimi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Sunar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Eisenbarth</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Heninger</surname>
          </string-name>
          , TPM-FAIL:
          <article-title>TPM meets Timing and Lattice Attacks, in: 29th Usenix Security Symp</article-title>
          .,
          <year>2020</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>C.</given-names>
            <surname>Sun</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Espitau</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Tibouchi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Abe</surname>
          </string-name>
          , Guessing Bits:
          <article-title>Improved Lattice Attacks on (EC)DSA with Nonce Leakage</article-title>
          ,
          <source>IACR Trans. Cryptographic Hardware and Embedded Systems Issue</source>
          <volume>1</volume>
          (
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>D.</given-names>
            <surname>Brumley</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Boneh</surname>
          </string-name>
          , Remote Timing Attacks are Practical, Computer Networks (
          <year>2005</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>B.</given-names>
            <surname>Nassi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Iluz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Cohen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Vayner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Nassi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Zadov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Elovici</surname>
          </string-name>
          ,
          <article-title>Video-Based Cryptanalysis: Extracting Cryptographic Keys from Video Footage of a Device's Power LED Captured by Standard Video Cameras</article-title>
          ,
          <source>in: 45th IEEE Symp. Security and Privacy (SP)</source>
          ,
          <year>2024</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>G.</given-names>
            <surname>Barthe</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Grégoire</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Laporte</surname>
          </string-name>
          ,
          <article-title>Secure Compilation of Side-Channel Countermeasures: The Case of Cryptographic “Constant-Time”</article-title>
          ,
          <source>in: 31st IEEE Computer Security Foundations Symp. (CSF)</source>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>USB</given-names>
            <surname>Armory</surname>
          </string-name>
          , https://www.withsecure.com/en/solutions/innovative-security-hardware/ usb-armory, accessed Oct.
          <year>2023</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>A.</given-names>
            <surname>Barisani</surname>
          </string-name>
          , GoKey Firmware, https://www.github.com/usbarmory/GoKey,
          <year>2023</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>A.</given-names>
            <surname>Pietig</surname>
          </string-name>
          ,
          <source>Functional Specification of the OpenPGP application on ISO Smart Card Operating Systems (v. 3.4.1)</source>
          , https://gnupg.org/ftp/specs/OpenPGP-smart
          <string-name>
            <surname>-</surname>
          </string-name>
          card
          <source>-application-3</source>
          .4.pdf,
          <year>2020</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>USB</given-names>
            <surname>Implementers Forum</surname>
          </string-name>
          ,
          <source>Universal Serial Bus Specification v2.0</source>
          ,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>USB</given-names>
            <surname>Implementers Forum</surname>
          </string-name>
          ,
          <article-title>Specification for Integrated Circuit(s) Cards Interface Devices (</article-title>
          <source>Rev. 1.1)</source>
          , https://www.usb.org/sites/default/files/DWG_Smart-Card_
          <article-title>CCID_Rev110</article-title>
          .pdf, Apr.
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          <source>[13] Linux Kernel v6.7</source>
          , https://www.kernel.org, accessed Apr.
          <year>2024</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14] What is eBPF, https://ebpf.io/what-is-ebpf/, accessed Oct.
          <year>2023</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <article-title>eBPF USB inspector</article-title>
          , https://github.com/gpioblink/ebpf-usb-inspector, accessed Oct.
          <year>2023</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <article-title>The kernel development community, The Linux-USB Host Side API</article-title>
          , https://www.kernel.org/doc/ html/v6.7/driver-api/usb/usb.html, accessed Oct.
          <year>2023</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>G.</given-names>
            <surname>Kroah-Hartman</surname>
          </string-name>
          ,
          <article-title>Writing USB Device Drivers</article-title>
          , https://www.kernel.org/doc/html/v6.7/driver-api/ usb/writing_usb_driver.html, accessed Feb.
          <year>2024</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <article-title>bpf-helpers(7), Linux man-pages</article-title>
          ,
          <source>Apr</source>
          .
          <year>2023</year>
          . URL: https://www.man7.org/linux/man-pages
          <source>/man7/ bpf-helpers.7</source>
          .html.
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>A.</given-names>
            <surname>Barisani</surname>
          </string-name>
          ,
          <string-name>
            <surname>A</surname>
          </string-name>
          . Rosano, TamaGo
          <article-title>- bare metal Go for ARM/RISC-V SoCs</article-title>
          , https://github.com/ usbarmory/tamago, accessed Lug.
          <year>2023</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20] libusb, https://libusb.info, accessed Feb.
          <year>2024</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>