System Architecture

System Architecture

7447 bookmarks
Custom sorting
HMAC and MACs - The Inner Workings of JWTs
HMAC and MACs - The Inner Workings of JWTs
HMACs and MACs are authentication codes and are often the backbone of JWT authentication systems. A Message Authentication Code (MAC) is a string of bits that depends on a secret key and is sent with a message to prove the message wasn’t tampered with. HMACs are a more strict version of MACs that offer additional security benefits. MAC - Message Authentication Code MACs are exactly what they sound like; small codes that allow receivers of messages to know who the sender was (authentication).
·blog.boot.dev·
HMAC and MACs - The Inner Workings of JWTs
Article: How to Generate an AWS Signature Version 4 - Boomi Community
Article: How to Generate an AWS Signature Version 4 - Boomi Community
pThis article describes how to generate an AWS signature version 4 and add it to the web service call request./p p /p h1strongUse Case/strong/h1 pWhen you manually create HTTP requests to AWS EC2, you must sign the requests by using AWS signature version 4./p p /p h1strongApproach/strong/h1 p1. Build a Canonical Request for Signature Version 4/p p /p pTo create a canonical request, concatenate the following components into a single string:/p ulliStart with the HTTP request method (GET, PUT, POST, etc.), followed by a newline character./liliAdd the canonical URI parameter, followed by a newline character./liliAdd the canonical query string, followed by a newline character. If the request does not include a query string, use an empty string (essentially, a blank line)./liliAdd the canonical headers, followed by a newline character./liliAdd the signed headers, followed by a newline character. This value is the list of headers that you included in the canonical headers. By adding this list of headers, you tell AWS which headers in the request are part of the signing process and which ones AWS can ignore. Use hash function SHA256 to create a hashed value from the payload in the body of the HTTP or HTTPS request./liliTo construct the finished canonical request, combine all the components from each step as a single string. /li/ul p /p p2. Create a String to Sign for Signature Version 4/p p /p ulliTo create the string to sign, start with the algorithm designation, followed by a newline character. This value is the hashing algorithm that you use to calculate the digests in the canonical request. For SHA256, AWS4-HMAC-SHA256 is the algorithm./liliAppend the request date value, followed by a newline character. The date is specified with ISO8601 basic format in the x-amz-date header in the format YYYYMMDD'T'HHMMSS'Z'. This value must match the value you used in any previous steps./liliAppend the credential scope value, followed by a newline character. This value is a string that includes the date, the region you are targeting, the service you are requesting, and a termination string ("aws4_request") in lowercase characters. The region and service name strings must be UTF-8 encoded./liliUse hash function SHA256 to create a hashed value from the canonical request. This value is not followed by a newline character. The hashed canonical request must be lowercase base-16 encoded./li/ul p /p p3. Calculate the Signature for AWS Signature Version 4/p p /p pTo calculate a signature, use your secret access key to create a series of hash-based message authentication codes (HMACs). brPseudocode for deriving a signing key:/p blockquote p dir="ltr"kSecret = your secret access keybrkDate = HMAC("AWS4" + kSecret, Date)brkRegion = HMAC(kDate, Region)brkService = HMAC(kRegion, Service)brkSigning = HMAC(kService, "aws4_request")/p /blockquote pUse the signing key that you derived and the string to sign as inputs to the keyed hash function. After you calculate the signature, convert the binary value to a hexadecimal representation./p pbr4. Add the Signing Information to the Request/p pYou can pass signing information either through the Authorization Header or through Query String, but you cannot pass it through both Authorization Header and Query String./p p /p h1strongImplementation/strong/h1 p1. Define 6 Dynamic Process Properties./p ulliPayload - The payload you are sending. This can be empty./liliDate - Current Date. Date needs to be in UTC time zone and the format needs to be yyyyMMdd. /liliRegion - The region you are targeting./liliService - The service you are requesting./liliAccess_Key_ID - Your AWS access key./liliSecretKey - Your AWS secret key./lili /li/ul pBelow is the script to create canonical request and calculate String to Sign./p pre import java.util.Properties; import java.util.Calendar; import java.text.SimpleDateFormat; import java.io.InputStream; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.security.InvalidKeyException; import com.boomi.execution.ExecutionUtil; import java.nio.charset.StandardCharsets; import javax.xml.bind.DatatypeConverter; import java.security.MessageDigest; import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Hex; public class SignString{ public static byte[] HmacSHA256(byte[] key) { MessageDigest mac = MessageDigest.getInstance("SHA-256"); byte[] signatureBytes = mac.digest(key); return signatureBytes; } public static String convertbyte(byte[] bytes) { StringBuffer hexString = new StringBuffer(); for (int j=0; j<bytes.length; j++) { String hex=Integer.toHexString(0xff & bytes[j]); if(hex.length()==1) hexString.append('0'); hexString.append(hex); } return hexString.toString(); } } for( int i = 0; i < dataContext.getDataCount(); i++ ) { InputStream is = dataContext.getStream(i); Properties props = dataContext.getProperties(i); // Acquire applicable Properties Day = ExecutionUtil.getDynamicProcessProperty("Date"); Input = ExecutionUtil.getDynamicProcessProperty("Payload"); Region = ExecutionUtil.getDynamicProcessProperty("Region"); Service = ExecutionUtil.getDynamicProcessProperty("Service"); AccessKey = ExecutionUtil.getDynamicProcessProperty("Access_Key_ID"); version = version number; Date now= new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); TimeZone utc = TimeZone.getTimeZone("UTC"); sdf.setTimeZone(utc); CDT = (sdf.format(now)).toString(); // Build CanonicalHeaders inputs for CanonicalRequest CanonicalHeaders_line1 = "content-type:application/x-www-form-urlencoded"; CanonicalHeaders_line2 = "host:ec2.amazonaws.com"; CanonicalHeaders_line3 = "x-amz-date:"+CDT; // Build CanonicalRequest Request_Method = "GET"; CanonicalURI = "/"; CanonicalQueryString = "Action=DescribeRegions&Version=version"; CanonicalHeaders = CanonicalHeaders_line1 + "\n" + CanonicalHeaders_line2 + "\n" + CanonicalHeaders_line3 + "\n"; SignedHeaders_line = "content-type;host;x-amz-date"; byte[] HashedPayload_bytes = new SignString().HmacSHA256(Input.getBytes("UTF-8")); HashedPayload = new SignString().convertbyte(HashedPayload_bytes); CanonicalRequest = Request_Method + "\n" + CanonicalURI + "\n" + CanonicalQueryString + "\n" + CanonicalHeaders + "\n" + SignedHeaders_line + "\n" + HashedPayload; // Calculate String to sign Signing_algorithm = "AWS4-HMAC-SHA256"; RequestDate = CDT; CredentialScope = Day+"/"+Region+"/"+Service+"/aws4_request"; byte[] HashedCanonicalRequest_bytes = new SignString().HmacSHA256(CanonicalRequest.getBytes("UTF-8")); HashedCanonicalRequest = new SignString().convertbyte(HashedCanonicalRequest_bytes); string_to_sign = Signing_algorithm+"\n"+RequestDate+"\n"+CredentialScope+"\n"+HashedCanonicalRequest; ExecutionUtil.setDynamicProcessProperty("String_to_sign",string_to_sign, false); dataContext.storeStream(is, props); }‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍/pre p /p p2. Use the below script to calculate signature and store the signature in a dynamic process property./p pre import java.util.Properties; import java.io.InputStream; import java.lang.Byte; import com.boomi.execution.ExecutionUtil; import javax.xml.bind.DatatypeConverter; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Hex; import java.security.MessageDigest; String String_to_sign= ExecutionUtil.getDynamicProcessProperty("String_to_sign"); Day = ExecutionUtil.getDynamicProcessProperty("Date"); Region = ExecutionUtil.getDynamicProcessProperty("Region"); Service = ExecutionUtil.getDynamicProcessProperty("Service"); String secret_key = ExecutionUtil.getDynamicProcessProperty("SecretKey"); // Create a signing key. byte[] signing_key = new CalculateSignature().getSignatureKey(secret_key, Day, Region, Service); // Use the signing key to sign the StringToSign using HMAC-SHA256 signing algorithm. byte[] signature_bytes = new CalculateSignature().HmacSHA256(String_to_sign, signing_key); String signature = new CalculateSignature().convertbyte(signature_bytes); String signature1 = new CalculateSignature().convertbyte(signing_key); public class CalculateSignature{ public static byte[] getSignatureKey(String key, String dateStamp, String regionName, String serviceName) { byte[] kSecret = ("AWS4" + key).getBytes("utf-8"); byte[] kDate = HmacSHA256(dateStamp, kSecret); byte[] kRegion = HmacSHA256(regionName, kDate); byte[] kService = HmacSHA256(serviceName, kRegion); byte[] kSigning = HmacSHA256("aws4_request", kService); return kSigning; } public static byte[] HmacSHA256(String data, byte[] key) { Mac mac = Mac.getInstance("HmacSHA256"); SecretKeySpec secretKeySpec = new SecretKeySpec(key, "HmacSHA256") mac.init(secretKeySpec); return mac.doFinal(data.getBytes("utf-8")); } public static String convertbyte(byte[] bytes) { StringBuffer hexString = ne
·community.boomi.com·
Article: How to Generate an AWS Signature Version 4 - Boomi Community
What's the difference between HTTPS and SHTTP protocols?
What's the difference between HTTPS and SHTTP protocols?
Answer (1 of 2): HTTPS and SHTTP both are not same. However, both offer enhanced security over HTTP. SHTTP (Secure Hypertext Transmission Protocol) is more advanced version of HTTP that provide security through encryption. HTTPS (Hypertext Transmission Protocol Secure) is normal HTTP over SSL/T...
·quora.com·
What's the difference between HTTPS and SHTTP protocols?
Rfc2660
Rfc2660
·ietf.org·
Rfc2660
AWS SIGv4 and SIGv4A — shufflesharding.com
AWS SIGv4 and SIGv4A — shufflesharding.com
In the time it takes to read this sentence, the AWS Identity and Access Management (IAM) service will handle several billion requests. Pretty close to every one of those requests is authenticated using the AWS SIGv4 protocol, before IAM authorization policy is applied to check if the request is allo
·shufflesharding.com·
AWS SIGv4 and SIGv4A — shufflesharding.com
The Commodification of Cloud
The Commodification of Cloud
Public cloud is no longer the bright new shiny toy, but it paved the way for XaaS, Edge, and a new cycle of innovation.
·f5.com·
The Commodification of Cloud
eBPF: It's All About Observability
eBPF: It's All About Observability
Full-stack observability is possible today, but at a price: cost efficiency and efficacy. eBPF is about to become ubiquitous—supporting Linux and Windows—and change that equation in the process.
·f5.com·
eBPF: It's All About Observability
Atomic Design
Atomic Design
Hey there! I wrote a book called Atomic Design that dives into this topic in more detail, which you can buy as an ebook. We’re not designing pages, we’re designing systems of components.—Stephen Hay As the craft of Web design continues to evolve, we're recognizing the need to develop thoughtful desi
·bradfrost.com·
Atomic Design
BDConf: Stephen Hay presents Responsive Design Workflow
BDConf: Stephen Hay presents Responsive Design Workflow
In Responsive Design Workflow, Stephen Hay (@stephenhay) talks how we have to adapt our workflow as well as we adapt our experiences. The landscape has changed, but our workflows have not. We need to change that. Updating Photoshop documents for web designs is immensely inefficient, especially f
·bradfrost.com·
BDConf: Stephen Hay presents Responsive Design Workflow
The top 20 web conference talks of 2012
The top 20 web conference talks of 2012
2012 in review: we asked web designers and developers from both sides of the Atlantic to recommend their favourite talks and presentations from the last 12 months. Here's what they've come up with.
·creativebloq.com·
The top 20 web conference talks of 2012
🌈 Hedonic Treadmill
🌈 Hedonic Treadmill
It's called hedonic adaptation, which results from our brain's ability to quickly adjust to changes in our environment, whether those changes are positive or negative
·vadimkravcenko.com·
🌈 Hedonic Treadmill
Odigos
Odigos
Observability Control Plane
·odigos.io·
Odigos
Data analytics: Less creepy, more empowering
Data analytics: Less creepy, more empowering
Lauren Peate, founder and CEO of Multitudes, joins the home team for a conversation about how managers and executives can support their development teams through ethical data and analytics practices. Plus: What it’s like to launch a startup in a smaller country like New Zealand.
·stackoverflow.blog·
Data analytics: Less creepy, more empowering
Software Visualization — Challenge, Accepted - Spotify Engineering
Software Visualization — Challenge, Accepted - Spotify Engineering
TL;DR Architectural diagrams are the bread and butter of software design and a foundational tool for communication and collaboration on software development. At Spotify, we have an incredibly complex network of thousands of interlinked software systems owned by hundreds of teams, so having a simple way to visualize these connections is essential. While capturing all [...]
·engineering.atspotify.com·
Software Visualization — Challenge, Accepted - Spotify Engineering