RSA Vulnerabilities from GPU Overclocking
RSA Vulnerabilities from GPU Overclocking
Faults
1 Introduction
1.1 Overview
GPUs are parallel processors capable of high performance computations. They
were originally designed for computer graphics acceleration, but are now com-
monly used for general purpose computation such as crypto-mining [8,34], deep
learning [9], crypto-acceleration [20], cryptanalysis [18] and password crack-
ing [22]. Adding a GPU to a system expands the system’s attack surface: vul-
nerabilities can be found in drivers and control codes [48], side channel attacks
2 Reuven Yakar, Avishai Wool, and Eyal Ronen
can be performed [14], and even the intended design of the GPU can lead to
information leakage [19]. In this paper, we investigate a less explored part of the
GPU’s attack surface, dealing with faults caused by overclocking.
Overclocking is a supported functionality of Nvidia GPUs. It is very popular
with many dedicated guides and tools available online [15,12,17,21], and Nvidia
GPUs provide documented APIs and tools to control the overclocking.
In this paper, we demonstrate the dangers of overclocking in cryptographic
applications. As shown by [49], as the temperature in the overclocked GPU
increases, spurious computation faults occur. Coupled with the well known fault
attacks against RSA implementations by Boneh et al. [5], one can expect such
faults to allow compromising RSA private keys during decryption or signing. In
other words, we hypothesize that if an overclocked GPU is used to accelerate RSA
calculations and an attacker can cause its temperature to rise and/or increase
its overclocking level, the private RSA key can be compromised.
As we shall see, we first validate this hypothesis: We evaluate two commercial-
grade GPU-based implementations of RSA within openSSL (called RNS and
MP), under a wide range of overclocking levels and temperatures, and demon-
strate that both implementations are indeed vulnerable.
However, and more importantly, we show for the first time that even if the
GPU is benignly overclocked to a seemingly “safe” rate, a successful attack can
still be mounted, over the network, by simply sending requests at an aggressive
rate to increase the temperature. If the attacker is able to raise the GPU tem-
perature in other ways—they can improve the efficiency of the attack. Hence,
setting any level of overclocking on the GPU is risky.
Note that allowing the GPU to be overclocked in the first place is controlled
by the so-called coolbits in the xorg file [1]. Modifying this file requires root
access. However, if the coolbits already allow any overclocking—manipulating
the overclocking level is an unprivileged action. Thus, if the GPU owner benignly
allows some level of overclocking level, an alternative attack vector exists: an
unprivileged attacker with local access can increase the overclocking level to the
point at which faults occur.
Jiang et al. were able to leak a full AES key in a program that used the
GPU to encrypt packets [14], using a timing side channel attack that correlated
between the execution time and data access behavior.
Work was also done in the field of reverse engineering GPUs: Bialas et al. have
researched the way thread divergence is implemented in Nvidia GPUs [3]. Wong
et al. have researched Nvidia’s GPU architecture through benchmarking [46].
The starting point of our research is the work of [49] which characterizes
the behavior of faults generated on an Nvidia GPU in an overclocking situation.
They showed that GPU memory can become unreliable in conditions of high
overclocking and/or high temperatures. Under these conditions, data read from
the GPU memory can be different from data previously written at the same ad-
dress. The research demonstrated that the frequency of errors increases sharply
with increased overclocking and temperature.
1.3 Contributions
2 Preliminaries
2.1 CUDA
GPUs include their own memory. There are different kinds of memory available,
with different properties. The most basic type is global memory [25]. Data stored
in global memory is available to all the threads of a running kernel and is per-
sistent across different kernel invocations. The developer can allocate buffers in
global memory using CUDA APIs such as cudaMalloc and then manage mem-
ory transfers between the device and the host via functions such as cudaMemcpy
combined with flags to indicate the direction - cudaMemcpyDeviceToHost or
cudaMemcpyHostToDevice. Accesses to the global memory are cached in the L2
cache, that is global to the whole GPU. If the compiler detects that a global
memory buffer is accessed in a read-only fashion, it can allow it to be cached
in the L1 cache as well by using a dedicated instruction (__ldg) to load it [27].
The L1 cache is local to each Streaming Multiprocessor (SM). The GPU used
for this work has 6 GiB of global memory, and 1.5 MiB of L2 cache.
In addition to the global memory Nvidia GPUs also support “shared” mem-
ory [26], which can be declared statically using the CUDA __shared__ specifier.
Shared memory is located on-chip, and therefore accesses to it are much faster
than to global memory. On the other hand, shared memory provides very re-
stricted semantics to the programmer: It is only shared between the threads
of a single thread-block; Synchronization between the threads accessing shared
memory needs to be done explicitly by calling the __syncthreads() intrinsic
function, which acts as a barrier; The life-time of the data in shared memory is
only the duration of the thread-block it belongs to. The shared memory is not
directly accessible from the host: the input and output of a kernel have to be
placed in global memory, and copied to/from the shared memory by the thread.
The shared memory is implemented by the same hardware memory banks
used for the L1 cache [28]. The total size of the L1 and the shared memory per
SM in our GPU is 64KiB. The developer can manually divide this area between
the L1 cache and shared memory in the range 16KiB-48KiB for each. This setting
can be done for a single kernel or for the whole device. The GPU used in this
work has a maximum of 48KiB of shared memory per thread block.
6 Reuven Yakar, Avishai Wool, and Eyal Ronen
2.3 Overclocking
Overclocking means increasing the clock frequency of a chip beyond its factory-
default setting. Overclocking is done for various reasons, including enhanced
gaming, bitcoin mining and so on. However overclocking has the risk of shorten-
ing the cycle time below some critical value such that some instructions execute
incorrectly, producing faulty results. In GPUs, overclocking in itself is not con-
sidered an adversarial action: in fact, it is a very popular action with many
dedicated guides and tools available online [15,12,17], and Nvidia GPUs pro-
vide documented APIs and tools to control the overclocking. In modern Nvidia
GPUs two different clocks can be overclocked: the Graphics Clock and the Mem-
ory Transfer Rate Clock. In this paper, we only treat the Memory Transfer Rate
clock.
To find out one’s preferred overclocking rates, tutorials are available online
(e.g., [11]). These tutorials guide the users through the process of tweaking their
GPU’s clock value to balance between speed and correctness of calculations. In
order to simulate an innocent user in our tests, we followed [11] to find a typical
overclocking range a user is likely to receive from such tutorial. It is important
to mention that an overclocking rate which still allows the GPU to function
properly is unique to each GPU, and differs between different GPU brands,
models and even between different GPUs of the exact same model.
Overclocking is disabled by default. To enable it requires the coolbits in the
xorg config file to be turned on [1]. The xorg config file can be accessed using
the nvidia-xconfig utility, or be manually edited. On Ubuntu 18.04 this file
can be found at /etc/X11/[Link]. To edit this file, root permissions are
required. However once the respective coolbits are enabled in the xorg file, any
unprivileged linux user can modify the overclocking level.
To set and query the overclocking properties we used the command line
utilities nvidia-smi and nvidia-settings [29,31].
Like any modern processor, the GPU has its own set of fans that allow it to
cool down during long and intensive executions. The default fan speed changes
dynamically according to the temperature.
Nvidia provides APIs to set and query advanced GPU options, e.g., set clock
speed and fan speed or query the temperature. Querying these values can be
done by a non-root user, but like for overclocking, setting them requires the
relevant coolbits in the xorg file to be turned on [1], i.e., with root privileges.
Once the relevant coolbits are turned on, a non-root user can set the fan speed
as well.
We also queried the fan speed and the temperature within our testing pro-
gram, without starting a new process of nvidia-settings for each query, using
the NVML API [30] exposed in [Link] library, which is included in
the CUDA SDK.
Breaking RSA with Overclocking-induced GPU Faults 7
For the sake of completeness, we explain here the fault injection attack of Boneh
et al. [5]. Recall that in RSA, a private key operation (decryption or signing)
involves computing m = cd mod N , where N = pq is the modulus, p and q are
the private primes and d is the private exponent. The RSA-CRT optimization
speeds this up by working modulo p and q separately. Specifically, we compute:
and then use the Chinese Remainder Theorem (CRT) to compute m modulo N :
Now if the we re-encrypt the result m̃ with the public key to get c̃ = m̃e mod N ,
the result is equivalent to c only modulo q and not modulo p, so
Therefore:
∆c = c − c̃ = q · k mod N,
for some integer k. By computing the GCD of ∆c and N , we can recover q:
q = gcd(∆c, N ),
Our attack target is a computer that has a GPU. We assume that at some point
prior to the attack the legitimate GPU owner used root privileges to enable the
“coolbits” allowing overclocking to be set. The owner also set an overclocking
level deemed to be “safe” for the normative workload on the GPU. The attacker
does not require root privileges.
We assume that the computer is running a cryptographic service which im-
plements RSA signatures or RSA decryptions on demand. The RSA calculations
are implemented using the GPU. The attacker is able to provide the inputs to
the service—i.e., mount a chosen plaintext attack (against RSA signatures) or a
chosen ciphertext attack (against RSA decryption). We assume that the service
always returns the cryptographic result and does not validate that it is error-free.
We assume that the service calculates multiple signatures/decryptions using
the same private key concurrently, in batches. The size of the batch depends on
8 Reuven Yakar, Avishai Wool, and Eyal Ronen
the number of accumulated incoming requests. The attacker can control the rate
of cryptographic requests, and thereby influence the batch size.
We assume a non-privileged attacker. In a scenario in which the cryptographic
service is accessible over the network the attacker can be remote, and can affect
the rate of requests by sending messages. In an alternative scenario the attacker
can be running on the same host as the service, with non-root privileges: in this
scenario the attacker is also able to control the overclocking level and possibly
also the temperature, thus making the attack more efficient.
supports CUDA toolkit and SDK versions 3.2 and 4.0 running on old Nvidia
GPUs up to Fermi architecture and was incompatible with our GPU, thus we
needed to build it with a newer SDK and target a newer architecture generation.
Libgpucrypto provides two different implementations of RSA for CUDA called
Multi-Precision (MP) and Residue Number System (RNS). In [13] the authors
explain various optimizations they included in the MP implementation, and
report that its performance is superior to that of RNS. The slower RNS imple-
mentation is also included in the libgpucrypto code. We experimented with both
algorithms to evaluate their susceptibility to overclocking- and temperature-
induced faults. While we weren’t directly interested in the relative performance
of the two algorithms, we did notice that also on our more modern hardware
and CUDA software environment MP is still significantly faster both in terms of
overall throughput and in terms of the GPU kernel run time per RSA decryption.
The RSA implementations in libgpucrypto take advantage of the parallelism
potential of the GPU in two ways. Firstly, the modular exponentiation algo-
rithms themselves are parallelized, and secondly, both implementations support
submitting a batch of ciphertexts for decryption by the same key in parallel, in
a single kernel invocation. We take advantage of this batch decryption feature
in our measurements.
As noted above, the code in [35] was written for old CUDA toolkit and SDK
versions 3.2 and 4.0 running on old Nvidia GPUs up to Fermi architecture. We
needed to update libgpucrypto in order to make it compile with SDK version
10.1, and we successfully built the code for the Pascal architecture (called sm_61
in the CUDA naming scheme).
One noteworthy change is that SDK v10.1 no longer includes the utility
cutilSafeCall, which checks the error code of CUDA library calls and exits on
error. It was used widely in the code, so we implemented it ourselves. We also
removed #includes of cutil_inline.h, which no longer exists in newer SDKs.
Even though our GPU has a Turing architecture and can run code built for
sm_75, we couldn’t use it due to the code’s use of the deprecated warp-level int
__any(int predicate) primitive in one of the RSA implementations, which only
exists up to the Pascal architecture (sm_61 ).
10 Reuven Yakar, Avishai Wool, and Eyal Ronen
4 Method
prepare (using CPU-based encryption), while the GPU is cooling down. Alg. 1
illustrates the test rig.
In each iteration Algorithm 1 prepares a batch of B (equal) ciphertexts for
decryption, and decrypts the whole batch in parallel on the GPU using Al-
gorithm 2. By default the batch size was B = 32, except for the experiments
evaluating the impact of the incoming request load on the temperature and fault
rates (see Section 5.1. We recorded the temperature of the GPU as soon as the
decryption kernel returns, searched for mistakes in the output, and recorded
them separately for each element of a batch.
Fig. 1. Temperature (in blue) and errors (in red, log-scale) over time under default
temperature control, with overclocking set at +2050MHz, for batch sizes varying from
1 to 512, for both algorithms.
the measured temperature was higher than the target temperature it responded
by increasing the fan speed. When the measured temperature was lower than
the target, it responded by decreasing the fan speed and starting another thread
that ran a small additional workload on the GPU. The specifics of the workload
and the change sizes in the fan speed were discovered by trial-and-error, aiming
for a relatively stable temperature for both RSA implementations on a range of
temperatures we were interested in monitoring (65◦ C − 78◦ C). The additional
workload consisted of allocating an array of total size 2.125MiB, filling it with
random integers, and in the GPU multiplying the elements in adjacent indices
i,i + 1 into index i in the array. The heating activity was done in a separate
CUDA data stream in order to minimize interference with the decryption. Using
a separate stream means that data transfer in and out of the GPU can happen
simultaneously to other code running on the GPU that doesn’t use this data,
which in this case is the main workload of RSA decryption. Algorithm 3 describes
the kernel that was used to heat up the GPU as needed. Algorithm 4 describes
the thread that monitored the temperature and responded by adjusting the fan
and running the heating kernel.
5 Results
5.1 The Impact of the Load on the Temperature and Fault Rate
The first scenario we investigate is one in which the legitimate owner config-
ured a “safe” overclocking level where no calculation faults occur. The unprivi-
leged attacker stresses the system by increasing the rate of requests. The server
Breaking RSA with Overclocking-induced GPU Faults 13
handles the growing load by increasing the batch size to calculate more signa-
tures/decryptions concurrently.
In this set of experiments we disabled the heat-control code in our testing
rig, set the overclocking to +2050 MHz, and used default fan control provided by
the GPU driver. We ran each of the two algorithm for 400 seconds, with a single
key and a batch size of 1, to simulate a non-stressed system, and then increased
the batch size to 64, 256 and 512 to simulate higher loads. We collected data on
the temperature and the number of faults per second.
The results are shown in Fig. 1, in which the top row depicts RNS and the
bottom row depicts MP. All the graphs show the measured temperature over
time in blue, and the recorded faults detected in every second over the run
period, in red.
The leftmost graphs, with batch size of 1, show that the temperature rises
up to 53–55◦ C and faults are not observed, i.e., the owner may well assume that
+2050MHz is a safe overclocking level. However, the graphs for batch sizes 64,
256, and 512 show that with higher loads and larger batch sizes, the temperature
rises much more quickly, reaching 64–65◦ C for RNS and 69–70◦ C for MP, and
both implementations exhibited faults. Note that all the MP tests except for
batch size of 1, as well as the RNS test with batch size of 512, crashed before
they reached 400 seconds.
At this overclocking level, MP with batch size 1 exhibited a throughput of
≈67.5 decryptions per second—and was stable; whereas with batch size 512 it
reached ≈3590 decryptions per second—but crashed after 117 seconds. Con-
versely, RNS with batch size 1 exhibited a throughput of ≈31 decryptions per
second, whereas with a batch size 512 it reached ≈694 decryptions per second—
and crashed after 368 seconds. On one hand, this validates the original observa-
tions of [13]: MP is about twice as fast with batch size of 1, and scales up much
better at larger batch sizes; On the other hand, MP’s ability to achieve high
throughput with larger batch sizes causes the temperature to rise, and pushes
the GPU into the fault-inducing regime much faster.
The figure also shows, superficially, that the RNS implementation exhibits
significantly more errors and at lower temperatures than the MP implementa-
tion: the red error bars for RNS are much higher (even in log-scale) and much
closer together than for MP with the same batch sizes. We explore this phe-
nomenon in detail in the next sections.
In conclusion, Fig. 1 shows that by simply sending requests at a higher rate
the attacker can successfully induce RSA calculation faults. If the attacker is
aggressive enough it can push the GPU into instability and cause a Denial of
Service.
described in Section 4.2. We used 50 different keys for MP, and 4 for RNS. As
mentioned, the batch size was set to 32 for all the tests. For MP we switched keys
after every batch and for RNS after every 10 batches. Note that the temperature
control is inaccurate: despite setting the target temperature to be T the momen-
tary GPU temperature fluctuated below and above T . Hence for every batch in
which at least one mistake was detected we measured the current temperature t
and attributed the mistakes to temperature t. We varied the target temperature
in order to get enough samples for the whole temperature range.
Fig. 2 shows the results of our attack on the RNS algorithm. The top graph
shows the percentage of decryption attempts which contained a mistake, as a
function of the temperature, for the 3 different overclocking rates. The middle
graph shows the percenatge of the decryption attempts that allowed for breaking
the private key. The bottom graph shows the percentage of RSA breaks out of
of the decryptions that contained mistakes. In other words, it’s the results in the
second graph divided by the results in the top. All the data points are based on
at least 50000 decryption attempts.
The graphs show very clearly that the temperature and the overclocking rate
directly affect the rate of mistakes (validating the observations of [49])—and
furthermore, that the vast majority of these mistakes are exploitable and allow
breaking RSA. And most importantly, that RNS is quite vulnerable: e.g., at
72◦ C about 15–30% of decryptions yield exploitable mistakes.
The drop in the rate of RSA breaks out of the mistakes can explained by
noting that high fault rates increase the probability of making a mistake in both
parts of the CRT - mp and mq (rather than in just one of them), in which case
we can’t break the RSA key.
Fig. 3 shows the same graphs but for the MP algorithm. We see that roughly
the same trends exist whereby higher temperatures lead to more RSA breaks.
However, MP exhibits significantly lower rates on all 3 graphs. In order to min-
imize fluctuations due to small numbers, in Fig. 3 we only include data points
based on at least 5000000 decryption attempts, however the graphs are still jit-
tery. For comparison, at 72◦ C only 0.25-0.50% of decryptions have a mistake,
and about 0.001% of decryptions yield exploitable mistakes: roughly 4 orders of
magnitude less than RNS. Note that despite the lower rate of RSA breaks the
vulnerability is still very dangerous: all the adversary really needs is a single
exploitable mistake to extact the private key. We suggest a possible explanation
for this phenomenon in the next section.
Fig. 4. RNS Profiler Memory Chart. (1) Number of requests to read/write global mem-
ory from the Unified Cache (L1). (2) Number of requests to read/write form/to shared
memory. (3) L1 cache hit rate. (4) L2 cache hit rate. (5) Total data transferred between
L2 & L1 cache
The biggest differences between the figures is in the use of global versus
shared memory and in the cache utilization. RNS makes about 3300 times more
global memory requests than MP (229.73 million requests in RNS versus 79.73
thousand in MP, see item “1” in both figures). Both algorithms make significant
use of the shared memory (142M requests in RNS versus 90M requests in MP,
item “2”)), but it seems that MP uses it almost exclusively, and RNS uses both
memory types a lot. Notice how shared memory accesses do not go through the
L2 cache at all. L1 cache hit rates are quite low, and comparable between the
algorithms: around 33% for RNS and 40%-50% for MP. For L2 cache hit rate the
difference is more clear: RNS consistently achieves over 99% hit-rate for its high
volume of global memory accesses; For MP’s limited number of global memory
accesses its L2 cache hit-rate results were unstable, exhibiting a wide range of
results in the range 33%-96% for different invocations. Finally we note the huge
difference in the total data transferred from the L2 cache to L1 cache (item “3”
in the figures): 17.88GiB for RNS versus only 2.14MiB for MP, roughly 4 orders
of magnitude more for RNS.
Based on these measurements we suggest a theory that overclocking-induced
faults exhibit themselves in global memory accesses, for which the transfers
between the L1 and L2 caches create a slower and more complex process; whereas
transfers from/to the shared memory, which are entirely on-chip, simpler and
much faster do not exhibit overclocking-induced faults. This theory is aligned
with the fact that RNS, which is a heavy user of global memory, is much more
vulnerable to faults, whereas MP with its minimal use of global memory is much
more resilient. This theory is also strengthened by the observations of [49], that
overclocking-induced faulty read accesses in fact returned stale values.
18 Reuven Yakar, Avishai Wool, and Eyal Ronen
Fig. 5. MP Profiler Memory Chart. (1) Number of requests to read/write global mem-
ory from the Unified Cache (L1). (2) Number of requests to read/write form/to shared
memory. (3) L1 cache hit rate. (4) L2 cache hit rate. (5) Total data transferred between
L2 & L1 cache
6 Conclusion
In this paper, we have systematically analyzed how GPU overclocking can in-
duce faults in CRT-based RSA computations and the resulting possibility of key
compromise. Even after overclocking, the GPU may perform the RSA computa-
tion correctly until faults are triggered. The faults can be triggered remotely due
to an increased number of requests that increase the computational load on the
GPU and cause its temperature to rise. Another alternative scenario assumes
unprivileged code running on the host machine. This unprivileged code can in-
crease the overclocking frequency level. This is possible due to the fact that as
long as overclocking is enabled, any unprivileged user can control its level.
Through systematic experiments, we showed how these faults could be ex-
ploited for private key recovery using classical cryptanalytic techniques. Notably,
our results highlight that the susceptibility to faults varies significantly between
cryptographic algorithms and implementation choices. Specifically, the Residue
Number System (RNS) implementation was far more vulnerable to memory
faults than the Multi-Precision (MP) implementation. These findings demon-
strate the risk in enabling GPU overclocking.
References
1. ArchWiki: NVIDIA/Tips and tricks. [Link]
NVIDIA/Tips_and_tricks
2. Aumüller, C., Bier, P., Fischer, W., Hofreiter, P., Seifert, J.P.: Fault attacks on
RSA with CRT: Concrete results and practical countermeasures. In: Cryptographic
Breaking RSA with Overclocking-induced GPU Faults 19
20. Manavski, S.A.: CUDA compatible GPU as an efficient hardware accelerator for
AES cryptography. In: 2007 IEEE International Conference on Signal Processing
and Communications. pp. 65–68. IEEE (2007)
21. MSI Afterburner: [Link]
22. Murakami, T., Kasahara, R., Saito, T.: An implementation and its evaluation
of password cracking tool parallelized on GPGPU. In: 2010 10th International
Symposium on Communications and Information Technologies. pp. 534–538. IEEE
(2010)
23. Naccache, D., Nguyen, P.Q., Tunstall, M., Whelan, C.: Experimenting with faults,
lattices and the DSA. In: Public Key Cryptography-PKC 2005: 8th International
Workshop on Theory and Practice in Public Key Cryptography, Les Diablerets,
Switzerland, January 23-26, 2005. Proceedings 8. pp. 16–28. Springer (2005)
24. Nvidia: Cuda C++ Programming Guide. [Link]
cuda-c-programming-guide/[Link]
25. Nvidia: Cuda C++ Programming Guide - Device Memory. [Link]
com/cuda/cuda-c-programming-guide/[Link]#device-memory
26. Nvidia: Cuda C++ Programming Guide - Shared Memory. [Link]
com/cuda/cuda-c-programming-guide/[Link]#shared-memory
27. Nvidia: Cuda C++ Programming Guide - Shared Memroy in Different Com-
pute Capabilities. [Link]
[Link]#global-memory-5-x
28. Nvidia: Cuda C++ Programming Guide - Shared Memroy in Different Com-
pute Capabilities. [Link]
[Link]#shared-memory-7-x
29. Nvidia: Nvidia System Management Interface. [Link]
nvidia-system-management-interface/
30. Nvidia: NVML API Reference Guide :: GPU Deployment and Management Doc-
umentation. [Link]
31. Nvidia: Using the nvidia-settings Utility. [Link]
XFree86/Linux-x86_64/396.51/README/[Link]/
32. Nvidia: Nsight compute :: Nsight compute documentation. [Link]
com/nsight-compute/2019.3/NsightCompute/[Link] (2019)
33. Park, K.: Personal communication (2022)
34. Ravago, G.: CUDA bitcoin miner. [Link]
miner
35. libgpucrypto, [Link]
36. Ryan, K., He, K., Sullivan, G.A., Heninger, N.: Passive SSH key compromise via
lattices. In: Proceedings of the 2023 ACM SIGSAC Conference on Computer and
Communications Security. pp. 2886–2900 (2023)
37. Sabbagh, M., Fei, Y., Kaeli, D.: A novel GPU overdrive fault attack. In: 2020
57th ACM/IEEE Design Automation Conference (DAC). pp. 1–6 (2020). https:
//[Link]/10.1109/DAC18072.2020.9218690
38. Sabbagh, M., Fei, Y., Kaeli, D.: Gpu overdrive fault attacks on neural networks.
In: 2021 IEEE/ACM International Conference On Computer Aided Design (IC-
CAD). p. 1–8. IEEE Press (2021). [Link]
9643486, [Link]
39. Shamir, A.: Method and apparatus for protecting public key schemes from timing
and fault attacks (Nov 23 1999), US Patent 5,991,415
40. SSLShader: A GPU-accelerated SSL proxy, [Link]
sslshader/
Breaking RSA with Overclocking-induced GPU Faults 21
41. Sullivan, G.A., Sippe, J., Heninger, N., Wustrow, E.: Open to a fault: On the
passive compromise of TLS keys via transient errors. In: 31st USENIX Security
Symposium. pp. 233–250 (2022)
42. Sun, R., Qiu, P., Lyu, Y., Dong, J., Wang, H., Wang, D., Qu, G.: Lightning:
Leveraging DVFS-induced transient fault injection to attack deep learning ac-
celerator of GPUs. ACM Trans. Des. Autom. Electron. Syst. 29(1) (Nov 2023).
[Link] [Link]
43. Timmers, N., Mune, C.: Escalating privileges in Linux using voltage fault injection.
In: 2017 Workshop on Fault Diagnosis and Tolerance in Cryptography (FDTC).
pp. 1–8 (2017). [Link]
44. Timmers, N., Spruyt, A., Witteman, M.: Controlling PC on ARM using fault
injection. In: 2016 Workshop on Fault Diagnosis and Tolerance in Cryptography
(FDTC). pp. 25–35. IEEE (2016)
45. Weimer, F.: Factoring RSA keys with TLS perfect forward secrecy. Red Hat Tech-
nical Report (2015)
46. Wong, H., Papadopoulou, M.M., Sadooghi-Alvandi, M., Moshovos, A.: Demystify-
ing GPU microarchitecture through microbenchmarking. In: 2010 IEEE Interna-
tional Symposium on Performance Analysis of Systems & Software (ISPASS). pp.
235–246. IEEE (2010)
47. Yen, S.M., Kim, S., Lim, S., Moon, S.J.: RSA speedup with Chinese remainder
theorem immune against hardware fault cryptanalysis. IEEE Transactions on com-
puters 52(4), 461–472 (2003)
48. Zhu, Z., Kim, S., Rozhanski, Y., Hu, Y., Witchel, E., Silberstein, M.: Understanding
the security of discrete GPUs. In: Proceedings of the General Purpose GPUs, pp.
1–11 (2017)
49. Zuberi, E., Wool, A.: Characterizing GPU overclocking faults. In: Proc. 26th
European Symposium on Research in Computer Security (ESORICS), LNCS
12972. pp. 110–130. Darmstadt, Germany (Oct 2021). [Link]
//[Link]/10.1007/978-3-030-88418-5_6