diff --git a/core/lib/Drupal/Core/Asset/AssetSetSriTrait.php b/core/lib/Drupal/Core/Asset/AssetSetSriTrait.php
new file mode 100644
index 0000000000..49badf14f8
--- /dev/null
+++ b/core/lib/Drupal/Core/Asset/AssetSetSriTrait.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace Drupal\Core\Asset;
+
+/**
+ * Provides a method to generate a SRI attribute for a given asset group.
+ */
+trait AssetSetSriTrait {
+
+  /**
+   * Implement SRI for a given group of JS/CSS assets.
+   *
+   * @param array $assets
+   *   A group of JS/CSS assets.
+   * @param string $data
+   *   Content of the asset file.
+   */
+  protected function addSriAttributes(array &$assets, string $data): void {
+    if (!isset($assets['attributes']['integrity'])) {
+      $hash = base64_encode(hash('sha512', $data, TRUE));
+      $attributes = [
+        'integrity' => 'sha512-' . $hash,
+        'crossorigin' => 'anonymous',
+      ];
+      if (!isset($assets['attributes'])) {
+        $assets['attributes'] = [];
+      }
+      $assets['attributes'] = array_merge($attributes, $assets['attributes']);
+    }
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Asset/CssCollectionOptimizer.php b/core/lib/Drupal/Core/Asset/CssCollectionOptimizer.php
index ec3b805c97..006fe21e8b 100644
--- a/core/lib/Drupal/Core/Asset/CssCollectionOptimizer.php
+++ b/core/lib/Drupal/Core/Asset/CssCollectionOptimizer.php
@@ -17,6 +17,8 @@
  */
 class CssCollectionOptimizer implements AssetCollectionOptimizerInterface {
 
+  use AssetSetSriTrait;
+
   /**
    * A CSS asset grouper.
    *
@@ -150,6 +152,8 @@ public function optimize(array $css_assets, array $libraries) {
               $uri = $this->dumper->dump($data, 'css');
               // Set the URI for this group's aggregate file.
               $css_assets[$order]['data'] = $uri;
+              // Implement SRI.
+              $this->addSriAttributes($css_assets[$order], $data);
               // Persist the URI for this aggregate file.
               $map[$key] = $uri;
               $this->state->set('drupal_css_cache_files', $map);
@@ -157,6 +161,7 @@ public function optimize(array $css_assets, array $libraries) {
             else {
               // Use the persisted URI for the optimized CSS file.
               $css_assets[$order]['data'] = $uri;
+              $this->addSriAttributes($css_assets[$order], file_get_contents($uri));
             }
             $css_assets[$order]['preprocessed'] = TRUE;
           }
diff --git a/core/lib/Drupal/Core/Asset/CssCollectionOptimizerLazy.php b/core/lib/Drupal/Core/Asset/CssCollectionOptimizerLazy.php
index ebf819fd5d..0e8cdcbe78 100644
--- a/core/lib/Drupal/Core/Asset/CssCollectionOptimizerLazy.php
+++ b/core/lib/Drupal/Core/Asset/CssCollectionOptimizerLazy.php
@@ -16,7 +16,7 @@
  */
 class CssCollectionOptimizerLazy implements AssetCollectionGroupOptimizerInterface {
 
-  use AssetGroupSetHashTrait;
+  use AssetGroupSetHashTrait, AssetSetSriTrait;
 
   /**
    * Constructs a CssCollectionOptimizerLazy.
@@ -120,6 +120,12 @@ public function optimize(array $css_assets, array $libraries) {
         $filename = 'css_' . $this->generateHash($css_asset) . '.css';
         $uri = 'assets://css/' . $filename;
         $css_assets[$order]['data'] = $this->fileUrlGenerator->generateString($uri) . '?' . UrlHelper::buildQuery($query);
+        $data = $this->optimizeGroup($css_asset);
+        $start_time = microtime(true);
+        $this->addSriAttributes($css_assets[$order], $data);
+        $end_time = microtime(true);
+        $execution_time = $end_time - $start_time;
+        echo "CSS Execution Time: " . $execution_time . " seconds" . PHP_EOL;
       }
       unset($css_assets[$order]['items']);
     }
diff --git a/core/lib/Drupal/Core/Asset/JsCollectionOptimizer.php b/core/lib/Drupal/Core/Asset/JsCollectionOptimizer.php
index 2d3597002c..01efcd68d2 100644
--- a/core/lib/Drupal/Core/Asset/JsCollectionOptimizer.php
+++ b/core/lib/Drupal/Core/Asset/JsCollectionOptimizer.php
@@ -17,6 +17,8 @@
  */
 class JsCollectionOptimizer implements AssetCollectionOptimizerInterface {
 
+  use AssetSetSriTrait;
+
   /**
    * A JS asset grouper.
    *
@@ -149,6 +151,8 @@ public function optimize(array $js_assets, array $libraries) {
               $uri = $this->dumper->dump($data, 'js');
               // Set the URI for this group's aggregate file.
               $js_assets[$order]['data'] = $uri;
+              // Implement SRI.
+              $this->addSriAttributes($js_assets[$order], $data);
               // Persist the URI for this aggregate file.
               $map[$key] = $uri;
               $this->state->set('system.js_cache_files', $map);
@@ -156,6 +160,7 @@ public function optimize(array $js_assets, array $libraries) {
             else {
               // Use the persisted URI for the optimized JS file.
               $js_assets[$order]['data'] = $uri;
+              $this->addSriAttributes($js_assets[$order], file_get_contents($uri));
             }
             $js_assets[$order]['preprocessed'] = TRUE;
           }
diff --git a/core/lib/Drupal/Core/Asset/JsCollectionOptimizerLazy.php b/core/lib/Drupal/Core/Asset/JsCollectionOptimizerLazy.php
index 6dff3650f2..44a884a640 100644
--- a/core/lib/Drupal/Core/Asset/JsCollectionOptimizerLazy.php
+++ b/core/lib/Drupal/Core/Asset/JsCollectionOptimizerLazy.php
@@ -16,7 +16,7 @@
  */
 class JsCollectionOptimizerLazy implements AssetCollectionGroupOptimizerInterface {
 
-  use AssetGroupSetHashTrait;
+  use AssetGroupSetHashTrait, AssetSetSriTrait;
 
   /**
    * Constructs a JsCollectionOptimizerLazy.
@@ -134,6 +134,12 @@ public function optimize(array $js_assets, array $libraries) {
           $filename = 'js_' . $this->generateHash($js_asset) . '.js';
           $uri = 'assets://js/' . $filename;
           $js_assets[$order]['data'] = $this->fileUrlGenerator->generateString($uri) . '?' . UrlHelper::buildQuery($query);
+          $data = $this->optimizeGroup($js_asset);
+          $start_time = microtime(true);
+          $this->addSriAttributes($js_assets[$order], $data);
+          $end_time = microtime(true);
+          $execution_time = $end_time - $start_time;
+          echo "JS Execution Time: " . $execution_time . " seconds" . PHP_EOL;
         }
         unset($js_assets[$order]['items']);
       }
