<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: AptZero</title>
    <description>The latest articles on DEV Community by AptZero (@aptzero).</description>
    <link>https://dev.to/aptzero</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F221601%2F335246e9-deb1-4a76-88b9-c76914ab2d61.png</url>
      <title>DEV Community: AptZero</title>
      <link>https://dev.to/aptzero</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aptzero"/>
    <language>en</language>
    <item>
      <title>Safeguarding Against IDN Homograph Attacks</title>
      <dc:creator>AptZero</dc:creator>
      <pubDate>Sat, 13 Jan 2024 19:46:38 +0000</pubDate>
      <link>https://dev.to/aptzero/unmasking-the-threat-understanding-and-safeguarding-against-idn-homograph-attacks-45og</link>
      <guid>https://dev.to/aptzero/unmasking-the-threat-understanding-and-safeguarding-against-idn-homograph-attacks-45og</guid>
      <description>&lt;p&gt;In the ever-evolving landscape of cybersecurity, where malicious actors constantly devise new strategies to exploit vulnerabilities, awareness and proactive defense are paramount. One such subtle yet potent threat is the Internationalized Domain Name (IDN) homograph attack. This article explores the significance of IDN homograph attacks, introduces the "EvilURL Checker" tool, and provides insights into utilizing it for enhanced cybersecurity.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are IDN Homograph Attacks?
&lt;/h2&gt;

&lt;p&gt;IDN homograph attacks involve the clever manipulation of characters in domain names, specifically those with different Unicode representations that visually resemble each other. These attacks aim to deceive users by creating domains that appear legitimate at a glance but actually lead to malicious websites.&lt;/p&gt;

&lt;p&gt;Consider the domain "github.com." Malicious actors might craft homograph variations like "githսb.com" or "gitһub.com", exploiting characters that look similar but are encoded differently. These devious techniques make it challenging for users to distinguish between legitimate and malicious domains, posing a severe threat to online security.&lt;/p&gt;

&lt;h2&gt;
  
  
  EvilURL Checker: A tool to check homograph domains
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;The EvilURL Checker is a Python tool meticulously designed to analyze and identify potential IDN homograph domains. It serves as an asset in the arsenal of cybersecurity professionals and users alike, helping to mitigate the risks associated with visually deceptive domains.&lt;/p&gt;

&lt;h3&gt;
  
  
  Motivation
&lt;/h3&gt;

&lt;p&gt;The primary motivation behind the EvilURL Checker project is to raise awareness about the security risks posed by IDN homograph attacks. By systematically identifying visually similar characters, the tool empowers users and security professionals to scrutinize domain names effectively, bolstering defenses against phishing attempts and other cyber threats.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;To integrate this powerful tool into your cybersecurity toolkit, the installation process is straightforward. First, ensure you have Python 3 installed in your machine, then utilize the following command to install it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;evilurl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Dependencies for Local Installation
&lt;/h3&gt;

&lt;p&gt;Set up a virtual environment with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv
&lt;span class="nb"&gt;source &lt;/span&gt;venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install the required libraries using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to Use EvilURL Checker
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Single Domain Analysis
&lt;/h3&gt;

&lt;p&gt;To check a single domain, run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;evilurl &amp;lt;domain&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Batch Analysis from File
&lt;/h3&gt;

&lt;p&gt;For analyzing multiple domains from a file, use the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;evilurl &lt;span class="nt"&gt;-f&lt;/span&gt; &amp;lt;file_path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Unicode Combinations
&lt;/h3&gt;

&lt;p&gt;EvilURL Checker considers various Unicode combinations, including Cyrillic, Greek, and Armenian characters. These combinations are strategically integrated to aid in the identification of potential homograph attacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Results: How It Works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;The tool extracts domain parts from the provided URL.&lt;/li&gt;
&lt;li&gt;It generates combinations of visually similar characters for each Latin character in the domain.&lt;/li&gt;
&lt;li&gt;For each combination, a new domain is constructed and checked for registration status and DNS information.&lt;/li&gt;
&lt;li&gt;The tool displays homograph domains, their punycode representation, and DNS status.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Example Usage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Single Domain Analysis
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;evilurl example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Batch Analysis from File
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;evilurl &lt;span class="nt"&gt;-f&lt;/span&gt; domains.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Return only the homograph domains
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;evilurl example.com &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  A Word of Caution: Disclaimer
&lt;/h2&gt;

&lt;p&gt;While EvilURL Checker is a robust tool for identifying potential threats, it is essential to use it responsibly. The tool is intended for educational and research purposes only. The author explicitly disclaims responsibility for any misuse of the tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Strengthening Cybersecurity Defenses
&lt;/h2&gt;

&lt;p&gt;In the realm of cybersecurity, understanding emerging threats is the first step toward effective defense. The EvilURL Checker serves as a valuable ally in identifying and neutralizing the risks posed by IDN homograph attacks. By integrating this tool into your cybersecurity arsenal, you contribute to a safer online environment, shielding yourself and others from the clandestine tactics of malicious actors. Remember, knowledge is power, and with tools like EvilURL Checker, you empower yourself to stay one step ahead in the ongoing battle against cyber threats.&lt;/p&gt;

&lt;h2&gt;
  
  
  Official Github Repo
&lt;/h2&gt;

&lt;p&gt;Contributions are welcome! &lt;a href="https://github.com/glaubermagal/evilurl" rel="noopener noreferrer"&gt;https://github.com/glaubermagal/evilurl&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>softwaresecurity</category>
      <category>python</category>
      <category>security</category>
    </item>
    <item>
      <title>Ensuring integrity, authenticity, and non-repudiation in data transmission using node.js</title>
      <dc:creator>AptZero</dc:creator>
      <pubDate>Sat, 07 Mar 2020 02:07:20 +0000</pubDate>
      <link>https://dev.to/aptzero/ensuring-integrity-authenticity-and-non-repudiation-in-data-transmission-using-node-js-2bha</link>
      <guid>https://dev.to/aptzero/ensuring-integrity-authenticity-and-non-repudiation-in-data-transmission-using-node-js-2bha</guid>
      <description>&lt;p&gt;This article is proposed to explain a few and well known Cryptographic Primitives to ensure integrity, authenticity, and non-repudiation in data transmission using node.js.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core concepts of Information Security
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Integrity:&lt;/strong&gt; can the recipient be confident that the message has not been modified during its lifecycle?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication:&lt;/strong&gt; can the recipient be confident that the message was originated from the sender?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-repudiation:&lt;/strong&gt; if the recipient passes the message and the proof to a third party, can the third party be confident that the message was originated from the sender?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Availability:&lt;/strong&gt; the information must be available when it is needed. This concept will not be covered by this article.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These concepts are also called Security Goals when we want to apply them to our systems. We can achieve these goals by using Cryptographic Primitives.&lt;/p&gt;

&lt;p&gt;Cryptographic primitives are well-established, low-level cryptographic algorithms that are frequently used to build cryptographic protocols for computer security systems. These routines include but are not limited to, one-way hash functions and encryption functions.&lt;/p&gt;

&lt;p&gt;In the table below, we can see the Security Goals that some Cryptographic Primitives can provide. In this article, I will be covering examples of HMAC and Digital Signatures.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cryptographic Primitive | Hash |    MAC    | Digital Signature
Security Goal           |      |           | 
------------------------+------+-----------+------------------
Integrity               |  Yes |    Yes    |   Yes
Authentication          |  No  |    Yes    |   Yes
Non-repudiation         |  No  |    No     |   Yes
------------------------+------+-----------+------------------
Kind of keys            | none | symmetric | asymmetric
                        |      |    keys   |    keys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Definition of MAC
&lt;/h2&gt;

&lt;p&gt;A Message Authentication Code (MAC) is a short piece of information used to authenticate a message. In other words, it's used to confirm that the message came from an expected sender and has not been changed without your knowledge. The MAC value ensures both the &lt;strong&gt;integrity&lt;/strong&gt; and &lt;strong&gt;authenticity&lt;/strong&gt; of a message, by regenerating it in the recipient using a shared secret &lt;strong&gt;key (K)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fta6curea8v6qq7vg6gz7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fta6curea8v6qq7vg6gz7.png" alt="MAC Definition" width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Definition of HMAC
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Keyed-Hash Message Authentication Code&lt;/strong&gt; (HMAC) is a MAC obtained by running a cryptographic hash function (like MD5, SHA1 or SHA256) over the data and a shared secret key.&lt;/p&gt;

&lt;p&gt;The main difference between MAC and HMAC is that MAC is a tag or a piece of information that helps to authenticate a message, while HMAC is a special type of MAC with a &lt;a href="https://en.wikipedia.org/wiki/Cryptographic_hash_function" rel="noopener noreferrer"&gt;cryptographic hash function&lt;/a&gt; and a secret key.&lt;/p&gt;

&lt;p&gt;HMACs are almost similar to digital signatures. Both enforce &lt;strong&gt;integrity&lt;/strong&gt; and &lt;strong&gt;authenticity&lt;/strong&gt;. Both use cryptographic keys, and both use hash functions. The main difference is that digital signatures use asymmetric keys, while HMACs use symmetric keys.&lt;/p&gt;

&lt;p&gt;HMACs may not enforce &lt;strong&gt;non-repudiation&lt;/strong&gt; because the sender and the receiver share the same secret key.&lt;/p&gt;
&lt;h2&gt;
  
  
  Definition of Digital Signature
&lt;/h2&gt;

&lt;p&gt;A digital signature is created with a private key and verified with the corresponding public key of an asymmetric key-pair. Only the holder of the private key can create this signature.&lt;/p&gt;

&lt;p&gt;The public keys are available to everyone. The private key is known only by the owner and can’t be derived from a public key. When something is encrypted with the public key, only the corresponding private key can decrypt it. In addition, when something is encrypted with the private key, then anyone can verify it with the corresponding public key.&lt;/p&gt;
&lt;h2&gt;
  
  
  Example of HMAC-SHA256 with &lt;strong&gt;node.js&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Due to some HMAC's properties (especially its cryptographic strength), it's highly dependent on its underlying hash function, a particular HMAC is usually identified based on that hash function. So we have HMAC algorithms that go by the names of HMAC-MD5, HMAC-SHA1, or HMAC-SHA256. This last one is cryptographically stronger than the others, so in this article, I'll provide an example of HMAC using SHA256 algorithm. See it below:&lt;/p&gt;
&lt;h3&gt;
  
  
  Creating a hash for the message
&lt;/h3&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;h3&gt;
  
  
  Validating the message
&lt;/h3&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h3&gt;
  
  
  Now, let’s play!
&lt;/h3&gt;

&lt;p&gt;This will generate the HMAC of the &lt;code&gt;body&lt;/code&gt; object with the &lt;code&gt;sharedSecret&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run get_hmac

// $ HMAC generated: &amp;lt;COPY_THIS_HMAC&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;This will validate the HMAC provided by the &lt;code&gt;get_hmac&lt;/code&gt; method. Try changing the provided HMAC, the &lt;code&gt;body&lt;/code&gt; or the &lt;code&gt;sharedSecret&lt;/code&gt; and see what happens!&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run --hmac=&amp;lt;PASTE_THE_HMAC_HERE&amp;gt; validate_hmac

// $ Valid HMAC | Error: ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Apparently, just comparing the two hashes as strings would be enough, but you should compare the time of generation of hashes in order to avoid timing attacks. For more information about this sort of issue, see &lt;a href="https://codahale.com/a-lesson-in-timing-attacks/" rel="noopener noreferrer"&gt;Coda Hale’s blog post&lt;/a&gt; about the timing attacks on KeyCzar and Java’s &lt;code&gt;MessageDigest.isEqual()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Suppose that a client is sending a message to a server, but the message or the hash was modified during its transmission, configuring a &lt;a href="https://www.cloudflare.com/learning/security/threats/man-in-the-middle-attack/" rel="noopener noreferrer"&gt;man-in-the-middle attack&lt;/a&gt;. In this case, the server should detect the possible attack and reject the request.&lt;/p&gt;

&lt;p&gt;This code is also available on &lt;a href="https://github.com/glaubermagal/hmac-example" rel="noopener noreferrer"&gt;this github repo&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Example of Digital Signature with &lt;strong&gt;node.js&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Digital Signatures work with asymmetric key-pair, one private and others public. In the example below, we will be generating the keys with &lt;a href="https://github.com/openssl/openssl" rel="noopener noreferrer"&gt;OpenSSL&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Create a folder for your project and create a &lt;code&gt;/keys&lt;/code&gt; folder on its root. After that, generate the key-pair. You can follow some simple examples in the lines below:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a private key on keys folder&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -pkeyopt rsa_keygen_pubexp:3 -out private_key.pem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Creating a public key on keys folder&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openssl pkey -in private_key.pem -out public_key.pem -pubout
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Create some document in the project root (follow an artistic example below)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IMITATION

by Edgar Allan Poe

A dark unfathomed tide
Of interminable pride
A mystery, and a dream,
Should my early life seem;
I say that dream was fraught
With a wild and waking thought
Of beings that have been,
Which my spirit hath not seen,
Had I let them pass me by,
With a dreaming eye!
Let none of earth inherit
That vision on my spirit;
Those thoughts I would control,
As a spell upon his soul:
For that bright hope at last
And that light time have past,
And my wordly rest hath gone
With a sigh as it passed on:
I care not though it perish
With a thought I then did cherish.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;The code below is responsible by creating a digital signature from your document using your private key.&lt;/p&gt;
&lt;h3&gt;
  
  
  Sign the document
&lt;/h3&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;The code below is responsible for validating the authenticity, integrity, and non-repudiation of your document using your public key.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validating the document
&lt;/h3&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Now, let's play!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This will write the signature of your document in the file signature.txt&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run sign

// $ Digital Signature: ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This will verify the signature of your document. Try changing the content of the document or the signature and see what happens!&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run verify

// $ Digital Signature Verification: (true or false)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You can take a look at these codes on &lt;a href="https://github.com/glaubermagal/digital-signature-example" rel="noopener noreferrer"&gt;my github repo&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Cryptographic Primitive should you use?
&lt;/h2&gt;

&lt;p&gt;This depends on the context. Sometimes you will communicate between only two servers on a private network and there's not the necessity of validating &lt;strong&gt;non-repudiation&lt;/strong&gt;, so a simple HMAC validation should be enough. Sometimes your system will be shared by an uncountable number of clients and servers, so in this case, you might be interested in enforcing the &lt;strong&gt;non-repudiation,&lt;/strong&gt; instead of just sharing the secret key with anyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This is a basic explanation about how to implement some Information Security Goals using some known Cryptographic Primitives using node.js. You should be aware that there are many kinds of advanced attacks that should be prevented by using other security layers and strategies.&lt;/p&gt;

&lt;p&gt;Thanks for reading! :)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codahale.com/a-lesson-in-timing-attacks/" rel="noopener noreferrer"&gt;https://codahale.com/a-lesson-in-timing-attacks/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://crypto.stackexchange.com/questions/5646/what-are-the-differences-between-a-digital-signature-a-mac-and-a-hash?newreg=90481a425fb14ff0a7250cde651e77e8" rel="noopener noreferrer"&gt;https://crypto.stackexchange.com/questions/5646/what-are-the-differences-between-a-digital-signature-a-mac-and-a-hash?newreg=90481a425fb14ff0a7250cde651e77e8&lt;/a&gt;&lt;br&gt;
&lt;a href="https://resources.infosecinstitute.com/wireless-attacks-unleashed/" rel="noopener noreferrer"&gt;https://resources.infosecinstitute.com/wireless-attacks-unleashed/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.jscape.com/blog/what-is-hmac-and-how-does-it-secure-file-transfers" rel="noopener noreferrer"&gt;https://www.jscape.com/blog/what-is-hmac-and-how-does-it-secure-file-transfers&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.jscape.com/blog/bid/84422/Symmetric-vs-Asymmetric-Encryption" rel="noopener noreferrer"&gt;https://www.jscape.com/blog/bid/84422/Symmetric-vs-Asymmetric-Encryption&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.cloudflare.com/learning/security/threats/man-in-the-middle-attack/" rel="noopener noreferrer"&gt;https://www.cloudflare.com/learning/security/threats/man-in-the-middle-attack/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://resources.infosecinstitute.com/non-repudiation-digital-signature/#gref" rel="noopener noreferrer"&gt;https://resources.infosecinstitute.com/non-repudiation-digital-signature/#gref&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
