<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Certificates on Wirez</title>
    <link>https://wirez.top/tags/certificates/</link>
    <description>Recent content in Certificates on Wirez</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Wed, 01 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://wirez.top/tags/certificates/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>RPKI routing gaps: Why 375k ROAs aren&#39;t enough</title>
      <link>https://wirez.top/posts/rpki-routing-gaps-why-375k-roas-arent-enough/</link>
      <pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://wirez.top/posts/rpki-routing-gaps-why-375k-roas-arent-enough/</guid>
      <description>&lt;!-- wp:html --&gt;&#xA;&lt;meta charset=&#34;utf-8&#34;&gt;&#xA;&lt;style&gt;&#xA;/* Platform CSS v3.0 */&#xA;:root {&#xA;  --primary-color: #4285f4;&#xA;  --primary-dark: #0057cc;&#xA;  --success-color: #34a853;&#xA;  --warning-color: #fbbc05;&#xA;  --error-color: #ea4335;&#xA;  --text-primary: #333333;&#xA;  --text-secondary: #666666;&#xA;  --text-light: #888888;&#xA;  --border-color: #e0e0e0;&#xA;  --background-light: #f8f9fa;&#xA;  --background-card: #ffffff;&#xA;  --background-code: #f5f5f5;&#xA;  --spacing-xs: 0.5rem;&#xA;  --spacing-sm: 1rem;&#xA;  --spacing-md: 1.5rem;&#xA;  --spacing-lg: 2rem;&#xA;  --border-radius: 8px;&#xA;  --border-radius-sm: 4px;&#xA;  --box-shadow: 0 2px 8px rgba(0,0,0,0.08);&#xA;  --box-shadow-hover: 0 4px 16px rgba(0,0,0,0.12);&#xA;}&#xA;.section-title {&#xA;  color: var(--text-primary);&#xA;  margin: var(--spacing-lg) 0 var(--spacing-sm);&#xA;  font-size: clamp(1.2rem, 3vw, 1.4rem);&#xA;  font-weight: 600;&#xA;  line-height: 1.3;&#xA;}&#xA;.subsection-title {&#xA;  color: var(--text-primary);&#xA;  margin: var(--spacing-md) 0 var(--spacing-xs);&#xA;  font-size: clamp(1.1rem, 2.5vw, 1.2rem);&#xA;  font-weight: 600;&#xA;}&#xA;.std-text {&#xA;  font-size: 1rem;&#xA;  line-height: 1.6;&#xA;  margin-bottom: var(--spacing-sm);&#xA;  color: var(--text-primary);&#xA;}&#xA;.card {&#xA;  border: 1px solid var(--border-color);&#xA;  padding: var(--spacing-sm);&#xA;  background: var(--background-card);&#xA;  border-radius: var(--border-radius);&#xA;  margin-bottom: var(--spacing-md);&#xA;  box-shadow: var(--box-shadow);&#xA;  transition: transform 0.2s ease, box-shadow 0.2s ease;&#xA;}&#xA;.card:hover {&#xA;  transform: translateY(-2px);&#xA;  box-shadow: var(--box-shadow-hover);&#xA;}&#xA;.emoji-list {&#xA;  font-size: 1rem;&#xA;  line-height: 1.7;&#xA;  margin-bottom: 0.8rem;&#xA;  padding: 0.8rem 0;&#xA;  border-bottom: 1px solid var(--border-color);&#xA;  color: var(--text-primary);&#xA;}&#xA;.emoji-list:last-child { border-bottom: none; }&#xA;.emoji-list strong { color: var(--primary-color); font-weight: 600; }&#xA;.table-container {&#xA;  width: 100%;&#xA;  overflow-x: auto;&#xA;  margin-bottom: var(--spacing-md);&#xA;  border-radius: var(--border-radius);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;.table-container + .table-container {&#xA;  margin-top: 1.5rem;&#xA;}&#xA;.data-table {&#xA;  width: 100%;&#xA;  min-width: 600px;&#xA;  border-collapse: collapse;&#xA;  background: white;&#xA;}&#xA;.data-table th, .data-table td {&#xA;  padding: var(--spacing-sm);&#xA;  border: 1px solid var(--border-color);&#xA;  font-size: 0.9rem;&#xA;  text-align: left;&#xA;}&#xA;.data-table th {&#xA;  background: var(--primary-color);&#xA;  color: white;&#xA;  font-weight: 700;&#xA;  white-space: nowrap;&#xA;}&#xA;.data-table td:first-child { font-weight: 700; }&#xA;.data-table tbody tr:nth-child(even) { background: #f8f9ff; }&#xA;.data-table tbody tr:nth-child(even) td { background: #f8f9ff !important; }&#xA;.data-table tbody tr:nth-child(odd) td { background: white !important; }&#xA;.data-table tr:hover td { background: #e8f0fe !important; }&#xA;.responsive-img {&#xA;  max-width: 100%;&#xA;  height: auto;&#xA;  border-radius: var(--border-radius);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;figure {&#xA;  margin: var(--spacing-lg) auto;&#xA;  text-align: center;&#xA;  width: 100%;&#xA;  max-width: 100%;&#xA;  display: block;&#xA;}&#xA;figure img { margin: 0 auto; display: block; max-width: 100%; height: auto; }&#xA;.img-caption {&#xA;  font-size: 0.9rem;&#xA;  color: var(--text-secondary);&#xA;  text-align: center;&#xA;  margin-top: var(--spacing-xs);&#xA;  font-style: italic;&#xA;}&#xA;.responsive-list {&#xA;  padding-left: 1.5rem;&#xA;  margin: var(--spacing-sm) 0;&#xA;  line-height: 1.7;&#xA;}&#xA;.responsive-list li { margin-bottom: var(--spacing-xs); padding-left: 0.5rem; }&#xA;.responsive-list a { color: var(--primary-color); text-decoration: none; font-weight: 600; }&#xA;.responsive-list a:hover { color: var(--primary-dark); text-decoration: underline; }&#xA;.callout { display:flex; gap:16px; padding:20px; border-radius:12px; margin:24px 0; border-left:4px solid; }&#xA;.callout-icon { font-size:24px; flex-shrink:0; }&#xA;.callout-content { flex:1; }&#xA;.callout-expert { background:#f0f7ff; border-color:#2563eb; }&#xA;.callout-info { background:#f0fdf4; border-color:#16a34a; }&#xA;.callout-warning { background:#fffbeb; border-color:#d97706; }&#xA;.faq-section {&#xA;  margin: var(--spacing-lg) 0;&#xA;  padding: var(--spacing-lg) 0;&#xA;  border-top: 2px solid var(--border-color);&#xA;}&#xA;.faq-section-title {&#xA;  color: var(--text-primary);&#xA;  font-size: clamp(1.2rem, 3vw, 1.4rem);&#xA;  font-weight: 700;&#xA;  margin-bottom: var(--spacing-lg);&#xA;  text-align: center;&#xA;}&#xA;.faq-item {&#xA;  background: var(--background-card);&#xA;  border: 1px solid var(--border-color);&#xA;  border-radius: var(--border-radius);&#xA;  margin-bottom: var(--spacing-sm);&#xA;  overflow: hidden;&#xA;  transition: all 0.3s ease;&#xA;}&#xA;.faq-item:hover {&#xA;  border-color: var(--primary-color);&#xA;  box-shadow: var(--box-shadow-hover);&#xA;  transform: translateY(-2px);&#xA;}&#xA;.faq-question {&#xA;  background: var(--background-light);&#xA;  padding: var(--spacing-sm) var(--spacing-md);&#xA;  cursor: pointer;&#xA;  position: relative;&#xA;  transition: all 0.3s ease;&#xA;  border: none;&#xA;  width: 100%;&#xA;  text-align: left;&#xA;  font-family: inherit;&#xA;}&#xA;.faq-question:hover { background: #e8f0fe; }&#xA;.faq-question-text {&#xA;  color: var(--text-primary);&#xA;  font-size: 1rem;&#xA;  font-weight: 600;&#xA;  line-height: 1.5;&#xA;  margin: 0;&#xA;  padding-right: 2rem;&#xA;}&#xA;.faq-answer {&#xA;  max-height: 0;&#xA;  overflow: hidden;&#xA;  transition: max-height 0.4s ease, padding 0.4s ease;&#xA;  padding: 0 var(--spacing-md);&#xA;}&#xA;.faq-item.active .faq-answer {&#xA;  max-height: 1000px;&#xA;  padding: 0 var(--spacing-md) var(--spacing-md);&#xA;}&#xA;.faq-answer-text {&#xA;  color: var(--text-secondary);&#xA;  font-size: 1rem;&#xA;  line-height: 1.7;&#xA;  margin: var(--spacing-sm) 0 0;&#xA;}&#xA;.about-section {&#xA;  background: var(--background-light);&#xA;  border-left: 4px solid var(--primary-color);&#xA;  border-radius: var(--border-radius);&#xA;  padding: var(--spacing-md) var(--spacing-lg);&#xA;  margin: var(--spacing-lg) 0;&#xA;}&#xA;.about-section .std-text {&#xA;  color: var(--text-secondary);&#xA;  font-size: 0.95rem;&#xA;  margin-bottom: 0;&#xA;}&#xA;.conclusion-section {&#xA;  border-top: 2px solid var(--border-color);&#xA;  padding-top: var(--spacing-lg);&#xA;  margin-top: var(--spacing-lg);&#xA;}&#xA;.conclusion-section .std-text {&#xA;  font-size: 1.05rem;&#xA;  line-height: 1.7;&#xA;}&#xA;@media (max-width: 768px) {&#xA;  .card { padding: 0.75rem; }&#xA;  .data-table { min-width: 100%; font-size: 0.8rem; }&#xA;  .data-table th, .data-table td { padding: 0.5rem 0.25rem; }&#xA;  .emoji-list { font-size: 0.95rem; }&#xA;}&#xA;@media (max-width: 480px) {&#xA;  .section-title { margin: var(--spacing-sm) 0 0.5rem; }&#xA;  .card { padding: 0.5rem; }&#xA;  .data-table th, .data-table td { padding: 0.4rem 0.2rem; font-size: 0.75rem; }&#xA;}&#xA;@media (prefers-reduced-motion: reduce) {&#xA;  *, *::before, *::after {&#xA;    animation-duration: 0.01ms !important;&#xA;    transition-duration: 0.01ms !important;&#xA;  }&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;!-- wp:html --&gt;&#xA;&lt;style&gt;&#xA;/* CSS переменные для единообразного стиля */&#xA;:root {&#xA;  --primary-color: #4285f4;&#xA;  --primary-dark: #0057cc;&#xA;  --success-color: #34a853;&#xA;  --warning-color: #fbbc05;&#xA;  --error-color: #ea4335;&#xA;  --text-primary: #333333;&#xA;  --text-secondary: #666666;&#xA;  --text-light: #888888;&#xA;  --border-color: #e0e0e0;&#xA;  --background-light: #f8f9fa;&#xA;  --background-card: #ffffff;&#xA;  --background-code: #f5f5f5;&#xA;  --warning-bg: #fff8f8;&#xA;  --spacing-xs: 0.5rem;&#xA;  --spacing-sm: 1rem;&#xA;  --spacing-md: 1.5rem;&#xA;  --spacing-lg: 2rem;&#xA;  --border-radius: 8px;&#xA;  --border-radius-sm: 4px;&#xA;  --box-shadow: 0 2px 8px rgba(0,0,0,0.08);&#xA;  --box-shadow-hover: 0 4px 16px rgba(0,0,0,0.12);&#xA;}&#xA;&#xA;/* Основные стили */&#xA;.article-marker {&#xA;  background: var(--primary-color);&#xA;  color: white;&#xA;  text-align: center;&#xA;  padding: var(--spacing-sm);&#xA;  margin: var(--spacing-lg) 0;&#xA;  font-size: 1rem;&#xA;  font-weight: 700;&#xA;  border-radius: var(--border-radius-sm);&#xA;  border: 2px dashed var(--primary-dark);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;&#xA;.main-title {&#xA;  margin-bottom: var(--spacing-md);&#xA;  font-size: clamp(1.5rem, 4vw, 2rem);&#xA;  font-weight: 700;&#xA;  color: var(--text-primary);&#xA;  line-height: 1.2;&#xA;}&#xA;&#xA;.section-title {&#xA;  color: var(--text-primary);&#xA;  margin: var(--spacing-lg) 0 var(--spacing-sm);&#xA;  font-size: clamp(1.2rem, 3vw, 1.4rem);&#xA;  font-weight: 600;&#xA;  line-height: 1.3;&#xA;}&#xA;&#xA;.subsection-title {&#xA;  color: var(--text-primary);&#xA;  margin: var(--spacing-md) 0 var(--spacing-xs);&#xA;  font-size: clamp(1.1rem, 2.5vw, 1.2rem);&#xA;  font-weight: 600;&#xA;}&#xA;&#xA;.std-text {&#xA;  font-size: 1rem;&#xA;  line-height: 1.6;&#xA;  margin-bottom: var(--spacing-sm);&#xA;  color: var(--text-primary);&#xA;}&#xA;&#xA;/* Улучшенные карточки */&#xA;.card {&#xA;  border: 1px solid var(--border-color);&#xA;  padding: var(--spacing-sm);&#xA;  background: var(--background-card);&#xA;  border-radius: var(--border-radius);&#xA;  margin-bottom: var(--spacing-md);&#xA;  box-shadow: var(--box-shadow);&#xA;  transition: transform 0.2s ease, box-shadow 0.2s ease;&#xA;}&#xA;&#xA;.card:hover {&#xA;  transform: translateY(-2px);&#xA;  box-shadow: var(--box-shadow-hover);&#xA;}&#xA;&#xA;.warning-box {&#xA;  border: 1px solid var(--error-color);&#xA;  padding: var(--spacing-sm);&#xA;  background: var(--warning-bg);&#xA;  border-radius: var(--border-radius);&#xA;  margin-bottom: var(--spacing-lg);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;&#xA;.warning-title {&#xA;  color: var(--error-color);&#xA;  margin-bottom: var(--spacing-xs);&#xA;  font-weight: 700;&#xA;  font-size: 1.1rem;&#xA;}&#xA;&#xA;/* Emoji списки с лучшими отступами */&#xA;.emoji-list {&#xA;  font-size: 1rem;&#xA;  line-height: 1.7;&#xA;  margin-bottom: 0.8rem;&#xA;  padding: 0.8rem 0;&#xA;  border-bottom: 1px solid var(--border-color);&#xA;  color: var(--text-primary);&#xA;  background: transparent;&#xA;}&#xA;&#xA;.emoji-list:last-child {&#xA;  border-bottom: none;&#xA;  margin-bottom: 0;&#xA;}&#xA;&#xA;.emoji-list strong {&#xA;  color: var(--primary-color);&#xA;  font-weight: 600;&#xA;}&#xA;&#xA;/* Адаптивные таблицы */&#xA;.table-container {&#xA;  width: 100%;&#xA;  overflow-x: auto;&#xA;  margin-bottom: var(--spacing-md);&#xA;  border-radius: var(--border-radius);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;&#xA;.data-table {&#xA;  width: 100%;&#xA;  min-width: 600px;&#xA;  border-collapse: collapse;&#xA;  background: white;&#xA;}&#xA;&#xA;.data-table th,&#xA;.data-table td {&#xA;  padding: var(--spacing-sm);&#xA;  border: 1px solid var(--border-color);&#xA;  font-size: 0.9rem;&#xA;  text-align: left;&#xA;}&#xA;&#xA;.data-table th {&#xA;  background: var(--primary-color);&#xA;  color: white;&#xA;  font-weight: 700;&#xA;  white-space: nowrap;&#xA;}&#xA;&#xA;.data-table td:first-child {&#xA;  font-weight: 700;&#xA;  font-size: 0.9rem;&#xA;}&#xA;&#xA;.data-table tbody tr:nth-child(even) {&#xA;  background: #f8f9ff;&#xA;}&#xA;&#xA;/* Убираем синий фон с первой строки tbody */&#xA;.data-table tbody tr:first-child {&#xA;  background: transparent !important;&#xA;  color: inherit !important;&#xA;}&#xA;&#xA;.data-table tbody tr:first-child td {&#xA;  background: transparent !important;&#xA;  color: inherit !important;&#xA;}&#xA;&#xA;/* Правильное чередование строк */&#xA;.data-table tbody tr:nth-child(even) td {&#xA;  background: #f8f9ff !important;&#xA;}&#xA;&#xA;.data-table tbody tr:nth-child(odd) td {&#xA;  background: white !important;&#xA;}&#xA;&#xA;.data-table tr:hover td {&#xA;  background: #e8f0fe;&#xA;}&#xA;&#xA;.data-table-caption {&#xA;  font-size: 0.9rem;&#xA;  color: var(--text-secondary);&#xA;  text-align: center;&#xA;  margin-top: var(--spacing-xs);&#xA;  font-style: italic;&#xA;}&#xA;&#xA;/* Улучшенные статус-теги */&#xA;.status-tag {&#xA;  display: inline-block;&#xA;  padding: 4px 8px;&#xA;  color: white;&#xA;  border-radius: 16px;&#xA;  font-size: 0.75rem;&#xA;  font-weight: 600;&#xA;  text-transform: uppercase;&#xA;  letter-spacing: 0.5px;&#xA;  box-shadow: 0 2px 4px rgba(0,0,0,0.2);&#xA;}&#xA;&#xA;.status-green { background: linear-gradient(135deg, var(--success-color), #2d8f47); }&#xA;.status-blue { background: linear-gradient(135deg, var(--primary-color), #3367d6); }&#xA;.status-yellow { background: linear-gradient(135deg, var(--warning-color), #f9ab00); color: #333; }&#xA;.status-red { background: linear-gradient(135deg, var(--error-color), #d33b2c); }&#xA;&#xA;/* Адаптивные блоки кода */&#xA;.code-block {&#xA;  font-family: &#39;Courier New&#39;, Consolas, Monaco, monospace;&#xA;  font-size: 0.85rem;&#xA;  background: var(--background-code);&#xA;  color: var(--text-primary);&#xA;  padding: var(--spacing-sm);&#xA;  border: 1px solid var(--border-color);&#xA;  border-radius: var(--border-radius);&#xA;  margin-bottom: var(--spacing-md);&#xA;  overflow-x: auto;&#xA;  line-height: 1.5;&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;&#xA;/* Адаптивные изображения */&#xA;.responsive-img {&#xA;  max-width: 100%;&#xA;  height: auto;&#xA;  border-radius: var(--border-radius);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;&#xA;.img-caption {&#xA;  font-size: 0.9rem;&#xA;  color: var(--text-secondary);&#xA;  text-align: center;&#xA;  margin-top: var(--spacing-xs);&#xA;  font-style: italic;&#xA;}&#xA;&#xA;/* Адаптивные списки */&#xA;.responsive-list {&#xA;  padding-left: 1.5rem;&#xA;  margin: var(--spacing-sm) 0;&#xA;  line-height: 1.7;&#xA;}&#xA;&#xA;.responsive-list li {&#xA;  margin-bottom: var(--spacing-xs);&#xA;  padding-left: 0.5rem;&#xA;}&#xA;&#xA;.responsive-list a {&#xA;  color: var(--primary-color);&#xA;  text-decoration: none;&#xA;  font-weight: 600;&#xA;  transition: color 0.2s ease;&#xA;}&#xA;&#xA;.responsive-list a:hover {&#xA;  color: var(--primary-dark);&#xA;  text-decoration: underline;&#xA;}&#xA;&#xA;/* Медиа-запросы для мобильных устройств */&#xA;@media (max-width: 768px) {&#xA;  .article-marker {&#xA;    font-size: 0.9rem;&#xA;    padding: 0.75rem;&#xA;    margin: var(--spacing-sm) 0;&#xA;  }&#xA;&#xA;  .card, .warning-box {&#xA;    padding: 0.75rem;&#xA;    margin-bottom: var(--spacing-sm);&#xA;  }&#xA;&#xA;  .data-table {&#xA;    min-width: 100%;&#xA;    font-size: 0.8rem;&#xA;  }&#xA;&#xA;  .data-table th,&#xA;  .data-table td {&#xA;    padding: 0.5rem 0.25rem;&#xA;  }&#xA;&#xA;  .status-tag {&#xA;    font-size: 0.7rem;&#xA;    padding: 3px 6px;&#xA;  }&#xA;&#xA;  .code-block {&#xA;    font-size: 0.8rem;&#xA;    padding: 0.75rem;&#xA;  }&#xA;&#xA;  .emoji-list {&#xA;    font-size: 0.95rem;&#xA;    line-height: 1.6;&#xA;  }&#xA;&#xA;  .responsive-list {&#xA;    padding-left: 1rem;&#xA;  }&#xA;}&#xA;&#xA;@media (max-width: 480px) {&#xA;  .section-title {&#xA;    margin: var(--spacing-sm) 0 0.5rem;&#xA;  }&#xA;&#xA;  .subsection-title {&#xA;    margin: var(--spacing-sm) 0 0.5rem;&#xA;  }&#xA;&#xA;  .card, .warning-box {&#xA;    padding: 0.5rem;&#xA;  }&#xA;&#xA;  .data-table th,&#xA;  .data-table td {&#xA;    padding: 0.4rem 0.2rem;&#xA;    font-size: 0.75rem;&#xA;  }&#xA;&#xA;  .code-block {&#xA;    font-size: 0.75rem;&#xA;    padding: 0.5rem;&#xA;  }&#xA;}&#xA;&#xA;/* Улучшение доступности */&#xA;@media (prefers-reduced-motion: reduce) {&#xA;  .card, .status-tag, .responsive-list a {&#xA;    transition: none;&#xA;  }&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;!-- /wp:html --&gt;&#xA;&lt;style&gt;:root{--text-primary:var(--text,#333333);--background-card:var(--bg-card,#ffffff);--background-light:var(--bg-subtle,#f8f9fa);--background-code:var(--bg-subtle,#f5f5f5);--border-color:var(--border,#e0e0e0)}&lt;/style&gt;&#xA;&lt;!-- /wp:html --&gt;&#xA;&lt;!-- wp:html --&gt;&#xA;&lt;script type=&#34;application/ld+json&#34;&gt;&#xA;{&#xA;  &#34;@context&#34;: &#34;https://schema.org&#34;,&#xA;  &#34;@type&#34;: &#34;FAQPage&#34;,&#xA;  &#34;mainEntity&#34;: [&#xA;    {&#xA;      &#34;@type&#34;: &#34;Question&#34;,&#xA;      &#34;name&#34;: &#34;What happens if router certificates are missing from RPKI?&#34;,&#xA;      &#34;acceptedAnswer&#34;: {&#xA;        &#34;@type&#34;: &#34;Answer&#34;,&#xA;        &#34;text&#34;: &#34;The trust chain remains incomplete without published certificates. As of June 2026, zero valid router certificates exist despite over 375,000 Route Origin Authorizations globally.&#34;&#xA;      }&#xA;    },&#xA;    {&#xA;      &#34;@type&#34;: &#34;Question&#34;,&#xA;      &#34;name&#34;: &#34;How do fee changes impact RPKI adoption costs?&#34;,&#xA;      &#34;acceptedAnswer&#34;: {&#xA;        &#34;@type&#34;: &#34;Answer&#34;,&#xA;        &#34;text&#34;: &#34;Annual fees directly affect operational budgets for resource holders. ARIN implemented a a portion increase in annual fees for 2026 while maintaining the fee cap structure.&#34;&#xA;      }&#xA;    },&#xA;    {&#xA;      &#34;@type&#34;: &#34;Question&#34;,&#xA;      &#34;name&#34;: &#34;What hardware is needed for offline RPKI validation?&#34;,&#xA;      &#34;acceptedAnswer&#34;: {&#xA;        &#34;@type&#34;: &#34;Answer&#34;,&#xA;        &#34;text&#34;: &#34;Specific CPU resources determine validation speed for offline modes. The APNIC benchmark utilizes a four CPU core machine to measure wall time validation run metrics.&#34;&#xA;      }&#xA;    },&#xA;    {&#xA;      &#34;@type&#34;: &#34;Question&#34;,&#xA;      &#34;name&#34;: &#34;How often is BGP data collected for analysis?&#34;,&#xA;      &#34;acceptedAnswer&#34;: {&#xA;        &#34;@type&#34;: &#34;Answer&#34;,&#xA;        &#34;text&#34;: &#34;Frequent snapshots ensure accurate tracking of prefix-origin pairs. BGP Routeviews data is collected at six-hour intervals to generate snapshots of IPv4 and IPv6 unique pairs.&#34;&#xA;      }&#xA;    },&#xA;    {&#xA;      &#34;@type&#34;: &#34;Question&#34;,&#xA;      &#34;name&#34;: &#34;Why does RPKI fail to prevent all route hijacks?&#34;,&#xA;      &#34;acceptedAnswer&#34;: {&#xA;        &#34;@type&#34;: &#34;Answer&#34;,&#xA;        &#34;text&#34;: &#34;The system secures origins but not the entire path. BGPsec adoption remains sparse globally, leaving the AS path vulnerable to manipulation despite origin validation.&#34;&#xA;      }&#xA;    }&#xA;  ]&#xA;}&#xA;&lt;/script&gt;&#xA;&lt;!-- /wp:html --&gt;&#xA;&lt;!-- wp:html --&gt;&#xA;&lt;style&gt;&#xA;.faq-section { margin: 24px 0; padding: 24px 0; border-top: 2px solid #e5e7eb; }&#xA;.faq-section-title { color: #1a1a1a; font-size: clamp(1.2rem, 3vw, 1.4rem); font-weight: 700; margin-bottom: 24px; text-align: center; }&#xA;.faq-item { background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; margin-bottom: 12px; overflow: hidden; transition: all 0.3s ease; }&#xA;.faq-item:hover { border-color: #2563eb; box-shadow: 0 4px 6px rgba(0,0,0,0.05); transform: translateY(-2px); }&#xA;.faq-question { background: #f9fafb; padding: 12px 16px; cursor: pointer; position: relative; transition: all 0.3s ease; border: none; width: 100%; text-align: left; font-family: inherit; display: block; }&#xA;.faq-question:hover { background: #e8f0fe; }&#xA;.faq-question-text { color: #1a1a1a; font-size: 1rem; font-weight: 600; line-height: 1.5; margin: 0; padding-right: 2rem; display: inline-block; }&#xA;.faq-answer { max-height: 0; overflow: hidden; transition: max-height 0.4s ease, padding 0.4s ease; padding: 0 16px; }&#xA;.faq-item.active .faq-answer { max-height: 1000px; padding: 0 16px 16px; }&#xA;.faq-answer-text { color: #4b5563; font-size: 1rem; line-height: 1.7; margin: 12px 0 0; }&#xA;&lt;/style&gt;&#xA;&lt;script&gt;&#xA;(function() {&#xA;  function initFAQ() {&#xA;    var qs = document.querySelectorAll(&#34;.faq-question&#34;);&#xA;    for (var i = 0; i &lt; qs.length; i++) {&#xA;      qs[i].addEventListener(&#34;click&#34;, function() {&#xA;        var item = this.closest(&#34;.faq-item&#34;);&#xA;        var wasActive = item.classList.contains(&#34;active&#34;);&#xA;        var allItems = document.querySelectorAll(&#34;.faq-item&#34;);&#xA;        for (var j = 0; j &lt; allItems.length; j++) { allItems[j].classList.remove(&#34;active&#34;); }&#xA;        if (!wasActive) item.classList.add(&#34;active&#34;);&#xA;        this.setAttribute(&#34;aria-expanded&#34;, String(!wasActive));&#xA;      });&#xA;    }&#xA;  }&#xA;  if (document.readyState === &#34;loading&#34;) {&#xA;    document.addEventListener(&#34;DOMContentLoaded&#34;, initFAQ);&#xA;  } else {&#xA;    initFAQ();&#xA;  }&#xA;})();&#xA;&lt;/script&gt;&#xA;&lt;!-- /wp:html --&gt;&#xA;&lt;!-- wp:html --&gt;&#xA;&lt;script type=&#34;application/ld+json&#34;&gt;&#xA;{&#xA;  &#34;@context&#34;: &#34;https://schema.org&#34;,&#xA;  &#34;@type&#34;: &#34;TechArticle&#34;,&#xA;  &#34;headline&#34;: &#34;The Role of RPKI in Modern BGP Routing Security&#34;,&#xA;  &#34;description&#34;: &#34;Despite over 375,000 Route Origin Authorizations existing globally, zero valid router certificates were published in the infrastructure as of June 2026. This...&#34;,&#xA;  &#34;author&#34;: {&#xA;    &#34;@type&#34;: &#34;Person&#34;,&#xA;    &#34;name&#34;: &#34;Alexander Timokhin&#34;&#xA;  },&#xA;  &#34;datePublished&#34;: &#34;2026-07-01T08:42:12.736Z&#34;,&#xA;  &#34;url&#34;: &#34;https://www.arelion.com/resources/guides/what-is-rpki&#34;,&#xA;  &#34;inLanguage&#34;: &#34;en&#34;,&#xA;  &#34;wordCount&#34;: 3226,&#xA;  &#34;publisher&#34;: {&#xA;    &#34;@type&#34;: &#34;Organization&#34;,&#xA;    &#34;name&#34;: &#34;InterLIR&#34;&#xA;  },&#xA;  &#34;speakable&#34;: {&#xA;    &#34;@type&#34;: &#34;SpeakableSpecification&#34;,&#xA;    &#34;cssSelector&#34;: [&#xA;      &#34;.article-intro&#34;,&#xA;      &#34;.faq-answer&#34;&#xA;    ]&#xA;  },&#xA;  &#34;about&#34;: [&#xA;    {&#xA;      &#34;@type&#34;: &#34;Thing&#34;,&#xA;      &#34;name&#34;: &#34;Resource Public Key Infrastructure&#34;&#xA;    }&#xA;  ]&#xA;}&#xA;&lt;/script&gt;&#xA;&lt;!-- /wp:html --&gt;&#xA;&lt;!-- wp:paragraph {&#34;className&#34;:&#34;std-text&#34;} --&gt;&#xA;&lt;!-- /wp:paragraph --&gt;&#xA;&lt;!-- wp:paragraph {&#34;className&#34;:&#34;std-text&#34;} --&gt;&#xA;&lt;p class=&#34;std-text&#34;&gt;Over 375,000 Route Origin Authorizations exist globally. As of June 2026, zero valid router certificates were published in the infrastructure.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RPKI validation: Fix maxLength to prevent leaks</title>
      <link>https://wirez.top/posts/rpki-validation-fix-maxlength-to-prevent-leaks/</link>
      <pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://wirez.top/posts/rpki-validation-fix-maxlength-to-prevent-leaks/</guid>
      <description>&lt;!-- wp:html --&gt;&#xA;&lt;meta charset=&#34;utf-8&#34;&gt;&#xA;&lt;style&gt;&#xA;/* Platform CSS v3.0 */&#xA;:root {&#xA;  --primary-color: #4285f4;&#xA;  --primary-dark: #0057cc;&#xA;  --success-color: #34a853;&#xA;  --warning-color: #fbbc05;&#xA;  --error-color: #ea4335;&#xA;  --text-primary: #333333;&#xA;  --text-secondary: #666666;&#xA;  --text-light: #888888;&#xA;  --border-color: #e0e0e0;&#xA;  --background-light: #f8f9fa;&#xA;  --background-card: #ffffff;&#xA;  --background-code: #f5f5f5;&#xA;  --spacing-xs: 0.5rem;&#xA;  --spacing-sm: 1rem;&#xA;  --spacing-md: 1.5rem;&#xA;  --spacing-lg: 2rem;&#xA;  --border-radius: 8px;&#xA;  --border-radius-sm: 4px;&#xA;  --box-shadow: 0 2px 8px rgba(0,0,0,0.08);&#xA;  --box-shadow-hover: 0 4px 16px rgba(0,0,0,0.12);&#xA;}&#xA;.section-title {&#xA;  color: var(--text-primary);&#xA;  margin: var(--spacing-lg) 0 var(--spacing-sm);&#xA;  font-size: clamp(1.2rem, 3vw, 1.4rem);&#xA;  font-weight: 600;&#xA;  line-height: 1.3;&#xA;}&#xA;.subsection-title {&#xA;  color: var(--text-primary);&#xA;  margin: var(--spacing-md) 0 var(--spacing-xs);&#xA;  font-size: clamp(1.1rem, 2.5vw, 1.2rem);&#xA;  font-weight: 600;&#xA;}&#xA;.std-text {&#xA;  font-size: 1rem;&#xA;  line-height: 1.6;&#xA;  margin-bottom: var(--spacing-sm);&#xA;  color: var(--text-primary);&#xA;}&#xA;.card {&#xA;  border: 1px solid var(--border-color);&#xA;  padding: var(--spacing-sm);&#xA;  background: var(--background-card);&#xA;  border-radius: var(--border-radius);&#xA;  margin-bottom: var(--spacing-md);&#xA;  box-shadow: var(--box-shadow);&#xA;  transition: transform 0.2s ease, box-shadow 0.2s ease;&#xA;}&#xA;.card:hover {&#xA;  transform: translateY(-2px);&#xA;  box-shadow: var(--box-shadow-hover);&#xA;}&#xA;.emoji-list {&#xA;  font-size: 1rem;&#xA;  line-height: 1.7;&#xA;  margin-bottom: 0.8rem;&#xA;  padding: 0.8rem 0;&#xA;  border-bottom: 1px solid var(--border-color);&#xA;  color: var(--text-primary);&#xA;}&#xA;.emoji-list:last-child { border-bottom: none; }&#xA;.emoji-list strong { color: var(--primary-color); font-weight: 600; }&#xA;.table-container {&#xA;  width: 100%;&#xA;  overflow-x: auto;&#xA;  margin-bottom: var(--spacing-md);&#xA;  border-radius: var(--border-radius);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;.table-container + .table-container {&#xA;  margin-top: 1.5rem;&#xA;}&#xA;.data-table {&#xA;  width: 100%;&#xA;  min-width: 600px;&#xA;  border-collapse: collapse;&#xA;  background: white;&#xA;}&#xA;.data-table th, .data-table td {&#xA;  padding: var(--spacing-sm);&#xA;  border: 1px solid var(--border-color);&#xA;  font-size: 0.9rem;&#xA;  text-align: left;&#xA;}&#xA;.data-table th {&#xA;  background: var(--primary-color);&#xA;  color: white;&#xA;  font-weight: 700;&#xA;  white-space: nowrap;&#xA;}&#xA;.data-table td:first-child { font-weight: 700; }&#xA;.data-table tbody tr:nth-child(even) { background: #f8f9ff; }&#xA;.data-table tbody tr:nth-child(even) td { background: #f8f9ff !important; }&#xA;.data-table tbody tr:nth-child(odd) td { background: white !important; }&#xA;.data-table tr:hover td { background: #e8f0fe !important; }&#xA;.responsive-img {&#xA;  max-width: 100%;&#xA;  height: auto;&#xA;  border-radius: var(--border-radius);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;figure {&#xA;  margin: var(--spacing-lg) auto;&#xA;  text-align: center;&#xA;  width: 100%;&#xA;  max-width: 100%;&#xA;  display: block;&#xA;}&#xA;figure img { margin: 0 auto; display: block; max-width: 100%; height: auto; }&#xA;.img-caption {&#xA;  font-size: 0.9rem;&#xA;  color: var(--text-secondary);&#xA;  text-align: center;&#xA;  margin-top: var(--spacing-xs);&#xA;  font-style: italic;&#xA;}&#xA;.responsive-list {&#xA;  padding-left: 1.5rem;&#xA;  margin: var(--spacing-sm) 0;&#xA;  line-height: 1.7;&#xA;}&#xA;.responsive-list li { margin-bottom: var(--spacing-xs); padding-left: 0.5rem; }&#xA;.responsive-list a { color: var(--primary-color); text-decoration: none; font-weight: 600; }&#xA;.responsive-list a:hover { color: var(--primary-dark); text-decoration: underline; }&#xA;.callout { display:flex; gap:16px; padding:20px; border-radius:12px; margin:24px 0; border-left:4px solid; }&#xA;.callout-icon { font-size:24px; flex-shrink:0; }&#xA;.callout-content { flex:1; }&#xA;.callout-expert { background:#f0f7ff; border-color:#2563eb; }&#xA;.callout-info { background:#f0fdf4; border-color:#16a34a; }&#xA;.callout-warning { background:#fffbeb; border-color:#d97706; }&#xA;.faq-section {&#xA;  margin: var(--spacing-lg) 0;&#xA;  padding: var(--spacing-lg) 0;&#xA;  border-top: 2px solid var(--border-color);&#xA;}&#xA;.faq-section-title {&#xA;  color: var(--text-primary);&#xA;  font-size: clamp(1.2rem, 3vw, 1.4rem);&#xA;  font-weight: 700;&#xA;  margin-bottom: var(--spacing-lg);&#xA;  text-align: center;&#xA;}&#xA;.faq-item {&#xA;  background: var(--background-card);&#xA;  border: 1px solid var(--border-color);&#xA;  border-radius: var(--border-radius);&#xA;  margin-bottom: var(--spacing-sm);&#xA;  overflow: hidden;&#xA;  transition: all 0.3s ease;&#xA;}&#xA;.faq-item:hover {&#xA;  border-color: var(--primary-color);&#xA;  box-shadow: var(--box-shadow-hover);&#xA;  transform: translateY(-2px);&#xA;}&#xA;.faq-question {&#xA;  background: var(--background-light);&#xA;  padding: var(--spacing-sm) var(--spacing-md);&#xA;  cursor: pointer;&#xA;  position: relative;&#xA;  transition: all 0.3s ease;&#xA;  border: none;&#xA;  width: 100%;&#xA;  text-align: left;&#xA;  font-family: inherit;&#xA;}&#xA;.faq-question:hover { background: #e8f0fe; }&#xA;.faq-question-text {&#xA;  color: var(--text-primary);&#xA;  font-size: 1rem;&#xA;  font-weight: 600;&#xA;  line-height: 1.5;&#xA;  margin: 0;&#xA;  padding-right: 2rem;&#xA;}&#xA;.faq-answer {&#xA;  max-height: 0;&#xA;  overflow: hidden;&#xA;  transition: max-height 0.4s ease, padding 0.4s ease;&#xA;  padding: 0 var(--spacing-md);&#xA;}&#xA;.faq-item.active .faq-answer {&#xA;  max-height: 1000px;&#xA;  padding: 0 var(--spacing-md) var(--spacing-md);&#xA;}&#xA;.faq-answer-text {&#xA;  color: var(--text-secondary);&#xA;  font-size: 1rem;&#xA;  line-height: 1.7;&#xA;  margin: var(--spacing-sm) 0 0;&#xA;}&#xA;.about-section {&#xA;  background: var(--background-light);&#xA;  border-left: 4px solid var(--primary-color);&#xA;  border-radius: var(--border-radius);&#xA;  padding: var(--spacing-md) var(--spacing-lg);&#xA;  margin: var(--spacing-lg) 0;&#xA;}&#xA;.about-section .std-text {&#xA;  color: var(--text-secondary);&#xA;  font-size: 0.95rem;&#xA;  margin-bottom: 0;&#xA;}&#xA;.conclusion-section {&#xA;  border-top: 2px solid var(--border-color);&#xA;  padding-top: var(--spacing-lg);&#xA;  margin-top: var(--spacing-lg);&#xA;}&#xA;.conclusion-section .std-text {&#xA;  font-size: 1.05rem;&#xA;  line-height: 1.7;&#xA;}&#xA;@media (max-width: 768px) {&#xA;  .card { padding: 0.75rem; }&#xA;  .data-table { min-width: 100%; font-size: 0.8rem; }&#xA;  .data-table th, .data-table td { padding: 0.5rem 0.25rem; }&#xA;  .emoji-list { font-size: 0.95rem; }&#xA;}&#xA;@media (max-width: 480px) {&#xA;  .section-title { margin: var(--spacing-sm) 0 0.5rem; }&#xA;  .card { padding: 0.5rem; }&#xA;  .data-table th, .data-table td { padding: 0.4rem 0.2rem; font-size: 0.75rem; }&#xA;}&#xA;@media (prefers-reduced-motion: reduce) {&#xA;  *, *::before, *::after {&#xA;    animation-duration: 0.01ms !important;&#xA;    transition-duration: 0.01ms !important;&#xA;  }&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;!-- wp:html --&gt;&#xA;&lt;style&gt;&#xA;/* CSS переменные для единообразного стиля */&#xA;:root {&#xA;  --primary-color: #4285f4;&#xA;  --primary-dark: #0057cc;&#xA;  --success-color: #34a853;&#xA;  --warning-color: #fbbc05;&#xA;  --error-color: #ea4335;&#xA;  --text-primary: #333333;&#xA;  --text-secondary: #666666;&#xA;  --text-light: #888888;&#xA;  --border-color: #e0e0e0;&#xA;  --background-light: #f8f9fa;&#xA;  --background-card: #ffffff;&#xA;  --background-code: #f5f5f5;&#xA;  --warning-bg: #fff8f8;&#xA;  --spacing-xs: 0.5rem;&#xA;  --spacing-sm: 1rem;&#xA;  --spacing-md: 1.5rem;&#xA;  --spacing-lg: 2rem;&#xA;  --border-radius: 8px;&#xA;  --border-radius-sm: 4px;&#xA;  --box-shadow: 0 2px 8px rgba(0,0,0,0.08);&#xA;  --box-shadow-hover: 0 4px 16px rgba(0,0,0,0.12);&#xA;}&#xA;&#xA;/* Основные стили */&#xA;.article-marker {&#xA;  background: var(--primary-color);&#xA;  color: white;&#xA;  text-align: center;&#xA;  padding: var(--spacing-sm);&#xA;  margin: var(--spacing-lg) 0;&#xA;  font-size: 1rem;&#xA;  font-weight: 700;&#xA;  border-radius: var(--border-radius-sm);&#xA;  border: 2px dashed var(--primary-dark);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;&#xA;.main-title {&#xA;  margin-bottom: var(--spacing-md);&#xA;  font-size: clamp(1.5rem, 4vw, 2rem);&#xA;  font-weight: 700;&#xA;  color: var(--text-primary);&#xA;  line-height: 1.2;&#xA;}&#xA;&#xA;.section-title {&#xA;  color: var(--text-primary);&#xA;  margin: var(--spacing-lg) 0 var(--spacing-sm);&#xA;  font-size: clamp(1.2rem, 3vw, 1.4rem);&#xA;  font-weight: 600;&#xA;  line-height: 1.3;&#xA;}&#xA;&#xA;.subsection-title {&#xA;  color: var(--text-primary);&#xA;  margin: var(--spacing-md) 0 var(--spacing-xs);&#xA;  font-size: clamp(1.1rem, 2.5vw, 1.2rem);&#xA;  font-weight: 600;&#xA;}&#xA;&#xA;.std-text {&#xA;  font-size: 1rem;&#xA;  line-height: 1.6;&#xA;  margin-bottom: var(--spacing-sm);&#xA;  color: var(--text-primary);&#xA;}&#xA;&#xA;/* Улучшенные карточки */&#xA;.card {&#xA;  border: 1px solid var(--border-color);&#xA;  padding: var(--spacing-sm);&#xA;  background: var(--background-card);&#xA;  border-radius: var(--border-radius);&#xA;  margin-bottom: var(--spacing-md);&#xA;  box-shadow: var(--box-shadow);&#xA;  transition: transform 0.2s ease, box-shadow 0.2s ease;&#xA;}&#xA;&#xA;.card:hover {&#xA;  transform: translateY(-2px);&#xA;  box-shadow: var(--box-shadow-hover);&#xA;}&#xA;&#xA;.warning-box {&#xA;  border: 1px solid var(--error-color);&#xA;  padding: var(--spacing-sm);&#xA;  background: var(--warning-bg);&#xA;  border-radius: var(--border-radius);&#xA;  margin-bottom: var(--spacing-lg);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;&#xA;.warning-title {&#xA;  color: var(--error-color);&#xA;  margin-bottom: var(--spacing-xs);&#xA;  font-weight: 700;&#xA;  font-size: 1.1rem;&#xA;}&#xA;&#xA;/* Emoji списки с лучшими отступами */&#xA;.emoji-list {&#xA;  font-size: 1rem;&#xA;  line-height: 1.7;&#xA;  margin-bottom: 0.8rem;&#xA;  padding: 0.8rem 0;&#xA;  border-bottom: 1px solid var(--border-color);&#xA;  color: var(--text-primary);&#xA;  background: transparent;&#xA;}&#xA;&#xA;.emoji-list:last-child {&#xA;  border-bottom: none;&#xA;  margin-bottom: 0;&#xA;}&#xA;&#xA;.emoji-list strong {&#xA;  color: var(--primary-color);&#xA;  font-weight: 600;&#xA;}&#xA;&#xA;/* Адаптивные таблицы */&#xA;.table-container {&#xA;  width: 100%;&#xA;  overflow-x: auto;&#xA;  margin-bottom: var(--spacing-md);&#xA;  border-radius: var(--border-radius);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;&#xA;.data-table {&#xA;  width: 100%;&#xA;  min-width: 600px;&#xA;  border-collapse: collapse;&#xA;  background: white;&#xA;}&#xA;&#xA;.data-table th,&#xA;.data-table td {&#xA;  padding: var(--spacing-sm);&#xA;  border: 1px solid var(--border-color);&#xA;  font-size: 0.9rem;&#xA;  text-align: left;&#xA;}&#xA;&#xA;.data-table th {&#xA;  background: var(--primary-color);&#xA;  color: white;&#xA;  font-weight: 700;&#xA;  white-space: nowrap;&#xA;}&#xA;&#xA;.data-table td:first-child {&#xA;  font-weight: 700;&#xA;  font-size: 0.9rem;&#xA;}&#xA;&#xA;.data-table tbody tr:nth-child(even) {&#xA;  background: #f8f9ff;&#xA;}&#xA;&#xA;/* Убираем синий фон с первой строки tbody */&#xA;.data-table tbody tr:first-child {&#xA;  background: transparent !important;&#xA;  color: inherit !important;&#xA;}&#xA;&#xA;.data-table tbody tr:first-child td {&#xA;  background: transparent !important;&#xA;  color: inherit !important;&#xA;}&#xA;&#xA;/* Правильное чередование строк */&#xA;.data-table tbody tr:nth-child(even) td {&#xA;  background: #f8f9ff !important;&#xA;}&#xA;&#xA;.data-table tbody tr:nth-child(odd) td {&#xA;  background: white !important;&#xA;}&#xA;&#xA;.data-table tr:hover td {&#xA;  background: #e8f0fe;&#xA;}&#xA;&#xA;.data-table-caption {&#xA;  font-size: 0.9rem;&#xA;  color: var(--text-secondary);&#xA;  text-align: center;&#xA;  margin-top: var(--spacing-xs);&#xA;  font-style: italic;&#xA;}&#xA;&#xA;/* Улучшенные статус-теги */&#xA;.status-tag {&#xA;  display: inline-block;&#xA;  padding: 4px 8px;&#xA;  color: white;&#xA;  border-radius: 16px;&#xA;  font-size: 0.75rem;&#xA;  font-weight: 600;&#xA;  text-transform: uppercase;&#xA;  letter-spacing: 0.5px;&#xA;  box-shadow: 0 2px 4px rgba(0,0,0,0.2);&#xA;}&#xA;&#xA;.status-green { background: linear-gradient(135deg, var(--success-color), #2d8f47); }&#xA;.status-blue { background: linear-gradient(135deg, var(--primary-color), #3367d6); }&#xA;.status-yellow { background: linear-gradient(135deg, var(--warning-color), #f9ab00); color: #333; }&#xA;.status-red { background: linear-gradient(135deg, var(--error-color), #d33b2c); }&#xA;&#xA;/* Адаптивные блоки кода */&#xA;.code-block {&#xA;  font-family: &#39;Courier New&#39;, Consolas, Monaco, monospace;&#xA;  font-size: 0.85rem;&#xA;  background: var(--background-code);&#xA;  color: var(--text-primary);&#xA;  padding: var(--spacing-sm);&#xA;  border: 1px solid var(--border-color);&#xA;  border-radius: var(--border-radius);&#xA;  margin-bottom: var(--spacing-md);&#xA;  overflow-x: auto;&#xA;  line-height: 1.5;&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;&#xA;/* Адаптивные изображения */&#xA;.responsive-img {&#xA;  max-width: 100%;&#xA;  height: auto;&#xA;  border-radius: var(--border-radius);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;&#xA;.img-caption {&#xA;  font-size: 0.9rem;&#xA;  color: var(--text-secondary);&#xA;  text-align: center;&#xA;  margin-top: var(--spacing-xs);&#xA;  font-style: italic;&#xA;}&#xA;&#xA;/* Адаптивные списки */&#xA;.responsive-list {&#xA;  padding-left: 1.5rem;&#xA;  margin: var(--spacing-sm) 0;&#xA;  line-height: 1.7;&#xA;}&#xA;&#xA;.responsive-list li {&#xA;  margin-bottom: var(--spacing-xs);&#xA;  padding-left: 0.5rem;&#xA;}&#xA;&#xA;.responsive-list a {&#xA;  color: var(--primary-color);&#xA;  text-decoration: none;&#xA;  font-weight: 600;&#xA;  transition: color 0.2s ease;&#xA;}&#xA;&#xA;.responsive-list a:hover {&#xA;  color: var(--primary-dark);&#xA;  text-decoration: underline;&#xA;}&#xA;&#xA;/* Медиа-запросы для мобильных устройств */&#xA;@media (max-width: 768px) {&#xA;  .article-marker {&#xA;    font-size: 0.9rem;&#xA;    padding: 0.75rem;&#xA;    margin: var(--spacing-sm) 0;&#xA;  }&#xA;&#xA;  .card, .warning-box {&#xA;    padding: 0.75rem;&#xA;    margin-bottom: var(--spacing-sm);&#xA;  }&#xA;&#xA;  .data-table {&#xA;    min-width: 100%;&#xA;    font-size: 0.8rem;&#xA;  }&#xA;&#xA;  .data-table th,&#xA;  .data-table td {&#xA;    padding: 0.5rem 0.25rem;&#xA;  }&#xA;&#xA;  .status-tag {&#xA;    font-size: 0.7rem;&#xA;    padding: 3px 6px;&#xA;  }&#xA;&#xA;  .code-block {&#xA;    font-size: 0.8rem;&#xA;    padding: 0.75rem;&#xA;  }&#xA;&#xA;  .emoji-list {&#xA;    font-size: 0.95rem;&#xA;    line-height: 1.6;&#xA;  }&#xA;&#xA;  .responsive-list {&#xA;    padding-left: 1rem;&#xA;  }&#xA;}&#xA;&#xA;@media (max-width: 480px) {&#xA;  .section-title {&#xA;    margin: var(--spacing-sm) 0 0.5rem;&#xA;  }&#xA;&#xA;  .subsection-title {&#xA;    margin: var(--spacing-sm) 0 0.5rem;&#xA;  }&#xA;&#xA;  .card, .warning-box {&#xA;    padding: 0.5rem;&#xA;  }&#xA;&#xA;  .data-table th,&#xA;  .data-table td {&#xA;    padding: 0.4rem 0.2rem;&#xA;    font-size: 0.75rem;&#xA;  }&#xA;&#xA;  .code-block {&#xA;    font-size: 0.75rem;&#xA;    padding: 0.5rem;&#xA;  }&#xA;}&#xA;&#xA;/* Улучшение доступности */&#xA;@media (prefers-reduced-motion: reduce) {&#xA;  .card, .status-tag, .responsive-list a {&#xA;    transition: none;&#xA;  }&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;!-- /wp:html --&gt;&#xA;&lt;style&gt;:root{--text-primary:var(--text,#333333);--background-card:var(--bg-card,#ffffff);--background-light:var(--bg-subtle,#f8f9fa);--background-code:var(--bg-subtle,#f5f5f5);--border-color:var(--border,#e0e0e0)}&lt;/style&gt;&#xA;&lt;!-- /wp:html --&gt;&#xA;&lt;!-- wp:html --&gt;&#xA;&lt;script type=&#34;application/ld+json&#34;&gt;&#xA;{&#xA;  &#34;@context&#34;: &#34;https://schema.org&#34;,&#xA;  &#34;@type&#34;: &#34;FAQPage&#34;,&#xA;  &#34;mainEntity&#34;: [&#xA;    {&#xA;      &#34;@type&#34;: &#34;Question&#34;,&#xA;      &#34;name&#34;: &#34;What specific risk arises from setting maxLength too liberally in a ROA?&#34;,&#xA;      &#34;acceptedAnswer&#34;: {&#xA;        &#34;@type&#34;: &#34;Answer&#34;,&#xA;        &#34;text&#34;: &#34;Liberal maxLength settings inadvertently authorize forged origin attacks on sub-prefixes. Operators should issue multiple precise ROAs instead, as conservative use prevents attackers from spoofing AS numbers for specific blocks not covered by exact lengths.&#34;&#xA;      }&#xA;    },&#xA;    {&#xA;      &#34;@type&#34;: &#34;Question&#34;,&#xA;      &#34;name&#34;: &#34;How many Regional Internet Registries act as the root Trust Anchors for the global system?&#34;,&#xA;      &#34;acceptedAnswer&#34;: {&#xA;        &#34;@type&#34;: &#34;Answer&#34;,&#xA;        &#34;text&#34;: &#34;Exactly five Regional Internet Registries serve as the root Trust Anchors for the hierarchy. These entities sign certificates for members, creating a chain that ensures validation decisions reflect the actual distribution of internet number resources globally.&#34;&#xA;      }&#xA;    },&#xA;    {&#xA;      &#34;@type&#34;: &#34;Question&#34;,&#xA;      &#34;name&#34;: &#34;What operational step converts signed ROA objects into data routers can use for validation?&#34;,&#xA;      &#34;acceptedAnswer&#34;: {&#xA;        &#34;@type&#34;: &#34;Answer&#34;,&#xA;        &#34;text&#34;: &#34;A local validator fetches Route Origin Authorizations and compiles them into Validated ROA Payloads. This dataset is pushed to border routers via the RPKI-to-Router protocol, establishing a strict separation between the validation plane and the forwarding plane.&#34;&#xA;      }&#xA;    },&#xA;    {&#xA;      &#34;@type&#34;: &#34;Question&#34;,&#xA;      &#34;name&#34;: &#34;Which RFC standard defines the maximum prefix length attribute found in every ROA?&#34;,&#xA;      &#34;acceptedAnswer&#34;: {&#xA;        &#34;@type&#34;: &#34;Answer&#34;,&#xA;        &#34;text&#34;: &#34;RFC 6482 specifications define the maxLength attribute within Route Origin Authorizations. This value controls the level of deaggregation an Autonomous System is allowed to perform, preventing unauthorized announcements of more specific prefixes than the owner intended.&#34;&#xA;      }&#xA;    },&#xA;    {&#xA;      &#34;@type&#34;: &#34;Question&#34;,&#xA;      &#34;name&#34;: &#34;What are the three possible status outcomes when a router compares announcements to VRPs?&#34;,&#xA;      &#34;acceptedAnswer&#34;: {&#xA;        &#34;@type&#34;: &#34;Answer&#34;,&#xA;        &#34;text&#34;: &#34;RFC 6811 describes three statuses: Valid, Invalid, or NotFound. Routers tag incoming BGP UPDATE messages based on the received list, blocking unauthorized origin announcements while relying entirely on the accuracy of published maxLength attributes.&#34;&#xA;      }&#xA;    }&#xA;  ]&#xA;}&#xA;&lt;/script&gt;&#xA;&lt;!-- /wp:html --&gt;&#xA;&lt;!-- wp:html --&gt;&#xA;&lt;style&gt;&#xA;.faq-section { margin: 24px 0; padding: 24px 0; border-top: 2px solid #e5e7eb; }&#xA;.faq-section-title { color: #1a1a1a; font-size: clamp(1.2rem, 3vw, 1.4rem); font-weight: 700; margin-bottom: 24px; text-align: center; }&#xA;.faq-item { background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; margin-bottom: 12px; overflow: hidden; transition: all 0.3s ease; }&#xA;.faq-item:hover { border-color: #2563eb; box-shadow: 0 4px 6px rgba(0,0,0,0.05); transform: translateY(-2px); }&#xA;.faq-question { background: #f9fafb; padding: 12px 16px; cursor: pointer; position: relative; transition: all 0.3s ease; border: none; width: 100%; text-align: left; font-family: inherit; display: block; }&#xA;.faq-question:hover { background: #e8f0fe; }&#xA;.faq-question-text { color: #1a1a1a; font-size: 1rem; font-weight: 600; line-height: 1.5; margin: 0; padding-right: 2rem; display: inline-block; }&#xA;.faq-answer { max-height: 0; overflow: hidden; transition: max-height 0.4s ease, padding 0.4s ease; padding: 0 16px; }&#xA;.faq-item.active .faq-answer { max-height: 1000px; padding: 0 16px 16px; }&#xA;.faq-answer-text { color: #4b5563; font-size: 1rem; line-height: 1.7; margin: 12px 0 0; }&#xA;&lt;/style&gt;&#xA;&lt;script&gt;&#xA;(function() {&#xA;  function initFAQ() {&#xA;    var qs = document.querySelectorAll(&#34;.faq-question&#34;);&#xA;    for (var i = 0; i &lt; qs.length; i++) {&#xA;      qs[i].addEventListener(&#34;click&#34;, function() {&#xA;        var item = this.closest(&#34;.faq-item&#34;);&#xA;        var wasActive = item.classList.contains(&#34;active&#34;);&#xA;        var allItems = document.querySelectorAll(&#34;.faq-item&#34;);&#xA;        for (var j = 0; j &lt; allItems.length; j++) { allItems[j].classList.remove(&#34;active&#34;); }&#xA;        if (!wasActive) item.classList.add(&#34;active&#34;);&#xA;        this.setAttribute(&#34;aria-expanded&#34;, String(!wasActive));&#xA;      });&#xA;    }&#xA;  }&#xA;  if (document.readyState === &#34;loading&#34;) {&#xA;    document.addEventListener(&#34;DOMContentLoaded&#34;, initFAQ);&#xA;  } else {&#xA;    initFAQ();&#xA;  }&#xA;})();&#xA;&lt;/script&gt;&#xA;&lt;!-- /wp:html --&gt;&#xA;&lt;!-- wp:html --&gt;&#xA;&lt;script type=&#34;application/ld+json&#34;&gt;&#xA;{&#xA;  &#34;@context&#34;: &#34;https://schema.org&#34;,&#xA;  &#34;@type&#34;: &#34;TechArticle&#34;,&#xA;  &#34;headline&#34;: &#34;The Role of RPKI in Modern BGP Security Architecture&#34;,&#xA;  &#34;description&#34;: &#34;RPKI adoption is increasing as of 2026, driving urgent needs for route origin validation durability. This article argues that while RPKI provides the essenti...&#34;,&#xA;  &#34;author&#34;: {&#xA;    &#34;@type&#34;: &#34;Person&#34;,&#xA;    &#34;name&#34;: &#34;Evgeny Sevastyanov&#34;&#xA;  },&#xA;  &#34;datePublished&#34;: &#34;2026-07-01T08:15:13.466Z&#34;,&#xA;  &#34;url&#34;: &#34;https://rpki.readthedocs.io/en/latest/rpki/securing-bgp.html&#34;,&#xA;  &#34;inLanguage&#34;: &#34;en&#34;,&#xA;  &#34;wordCount&#34;: 3306,&#xA;  &#34;publisher&#34;: {&#xA;    &#34;@type&#34;: &#34;Organization&#34;,&#xA;    &#34;name&#34;: &#34;InterLIR&#34;&#xA;  },&#xA;  &#34;speakable&#34;: {&#xA;    &#34;@type&#34;: &#34;SpeakableSpecification&#34;,&#xA;    &#34;cssSelector&#34;: [&#xA;      &#34;.article-intro&#34;,&#xA;      &#34;.faq-answer&#34;&#xA;    ]&#xA;  },&#xA;  &#34;about&#34;: [&#xA;    {&#xA;      &#34;@type&#34;: &#34;Thing&#34;,&#xA;      &#34;name&#34;: &#34;RPKI&#34;&#xA;    }&#xA;  ]&#xA;}&#xA;&lt;/script&gt;&#xA;&lt;!-- /wp:html --&gt;&#xA;&lt;!-- wp:paragraph {&#34;className&#34;:&#34;std-text&#34;} --&gt;&#xA;&lt;!-- /wp:paragraph --&gt;&#xA;&lt;!-- wp:paragraph {&#34;className&#34;:&#34;std-text&#34;} --&gt;&#xA;&lt;p class=&#34;std-text&#34;&gt;&lt;a href=&#34;https://datatracker.ietf.org/doc/html/rfc6480&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;RPKI&lt;/a&gt; adoption is increasing as of 2026, driving urgent needs for &lt;strong&gt;route origin validation&lt;/strong&gt; durability. You will learn the specific mechanics of &lt;strong&gt;ROA&lt;/strong&gt; objects, including how the &lt;strong&gt;maxLength&lt;/strong&gt; attribute controls prefix deaggregation to prevent unauthorized announcements. Finally, we address strategic &lt;strong&gt;ROA&lt;/strong&gt; deployment, highlighting why conservative use of length attributes is critical to avoiding security gaps that mimic the failures of the legacy &lt;strong&gt;IRR&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RPKI adoption hits tipping point for routing</title>
      <link>https://wirez.top/posts/rpki-adoption-hits-tipping-point-for-routing/</link>
      <pubDate>Fri, 23 May 2025 00:00:00 +0000</pubDate>
      <guid>https://wirez.top/posts/rpki-adoption-hits-tipping-point-for-routing/</guid>
      <description>&lt;!-- wp:html --&gt;&#xA;&lt;meta charset=&#34;utf-8&#34;&gt;&#xA;&lt;style&gt;&#xA;/* Platform CSS v3.0 */&#xA;:root {&#xA;  --primary-color: #4285f4;&#xA;  --primary-dark: #0057cc;&#xA;  --success-color: #34a853;&#xA;  --warning-color: #fbbc05;&#xA;  --error-color: #ea4335;&#xA;  --text-primary: #333333;&#xA;  --text-secondary: #666666;&#xA;  --text-light: #888888;&#xA;  --border-color: #e0e0e0;&#xA;  --background-light: #f8f9fa;&#xA;  --background-card: #ffffff;&#xA;  --background-code: #f5f5f5;&#xA;  --spacing-xs: 0.5rem;&#xA;  --spacing-sm: 1rem;&#xA;  --spacing-md: 1.5rem;&#xA;  --spacing-lg: 2rem;&#xA;  --border-radius: 8px;&#xA;  --border-radius-sm: 4px;&#xA;  --box-shadow: 0 2px 8px rgba(0,0,0,0.08);&#xA;  --box-shadow-hover: 0 4px 16px rgba(0,0,0,0.12);&#xA;}&#xA;.section-title {&#xA;  color: var(--text-primary);&#xA;  margin: var(--spacing-lg) 0 var(--spacing-sm);&#xA;  font-size: clamp(1.2rem, 3vw, 1.4rem);&#xA;  font-weight: 600;&#xA;  line-height: 1.3;&#xA;}&#xA;.subsection-title {&#xA;  color: var(--text-primary);&#xA;  margin: var(--spacing-md) 0 var(--spacing-xs);&#xA;  font-size: clamp(1.1rem, 2.5vw, 1.2rem);&#xA;  font-weight: 600;&#xA;}&#xA;.std-text {&#xA;  font-size: 1rem;&#xA;  line-height: 1.6;&#xA;  margin-bottom: var(--spacing-sm);&#xA;  color: var(--text-primary);&#xA;}&#xA;.card {&#xA;  border: 1px solid var(--border-color);&#xA;  padding: var(--spacing-sm);&#xA;  background: var(--background-card);&#xA;  border-radius: var(--border-radius);&#xA;  margin-bottom: var(--spacing-md);&#xA;  box-shadow: var(--box-shadow);&#xA;  transition: transform 0.2s ease, box-shadow 0.2s ease;&#xA;}&#xA;.card:hover {&#xA;  transform: translateY(-2px);&#xA;  box-shadow: var(--box-shadow-hover);&#xA;}&#xA;.emoji-list {&#xA;  font-size: 1rem;&#xA;  line-height: 1.7;&#xA;  margin-bottom: 0.8rem;&#xA;  padding: 0.8rem 0;&#xA;  border-bottom: 1px solid var(--border-color);&#xA;  color: var(--text-primary);&#xA;}&#xA;.emoji-list:last-child { border-bottom: none; }&#xA;.emoji-list strong { color: var(--primary-color); font-weight: 600; }&#xA;.table-container {&#xA;  width: 100%;&#xA;  overflow-x: auto;&#xA;  margin-bottom: var(--spacing-md);&#xA;  border-radius: var(--border-radius);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;.table-container + .table-container {&#xA;  margin-top: 1.5rem;&#xA;}&#xA;.data-table {&#xA;  width: 100%;&#xA;  min-width: 600px;&#xA;  border-collapse: collapse;&#xA;  background: white;&#xA;}&#xA;.data-table th, .data-table td {&#xA;  padding: var(--spacing-sm);&#xA;  border: 1px solid var(--border-color);&#xA;  font-size: 0.9rem;&#xA;  text-align: left;&#xA;}&#xA;.data-table th {&#xA;  background: var(--primary-color);&#xA;  color: white;&#xA;  font-weight: 700;&#xA;  white-space: nowrap;&#xA;}&#xA;.data-table td:first-child { font-weight: 700; }&#xA;.data-table tbody tr:nth-child(even) { background: #f8f9ff; }&#xA;.data-table tbody tr:nth-child(even) td { background: #f8f9ff !important; }&#xA;.data-table tbody tr:nth-child(odd) td { background: white !important; }&#xA;.data-table tr:hover td { background: #e8f0fe !important; }&#xA;.responsive-img {&#xA;  max-width: 100%;&#xA;  height: auto;&#xA;  border-radius: var(--border-radius);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;figure {&#xA;  margin: var(--spacing-lg) auto;&#xA;  text-align: center;&#xA;  width: 100%;&#xA;  max-width: 100%;&#xA;  display: block;&#xA;}&#xA;figure img { margin: 0 auto; display: block; max-width: 100%; height: auto; }&#xA;.img-caption {&#xA;  font-size: 0.9rem;&#xA;  color: var(--text-secondary);&#xA;  text-align: center;&#xA;  margin-top: var(--spacing-xs);&#xA;  font-style: italic;&#xA;}&#xA;.responsive-list {&#xA;  padding-left: 1.5rem;&#xA;  margin: var(--spacing-sm) 0;&#xA;  line-height: 1.7;&#xA;}&#xA;.responsive-list li { margin-bottom: var(--spacing-xs); padding-left: 0.5rem; }&#xA;.responsive-list a { color: var(--primary-color); text-decoration: none; font-weight: 600; }&#xA;.responsive-list a:hover { color: var(--primary-dark); text-decoration: underline; }&#xA;.callout { display:flex; gap:16px; padding:20px; border-radius:12px; margin:24px 0; border-left:4px solid; }&#xA;.callout-icon { font-size:24px; flex-shrink:0; }&#xA;.callout-content { flex:1; }&#xA;.callout-expert { background:#f0f7ff; border-color:#2563eb; }&#xA;.callout-info { background:#f0fdf4; border-color:#16a34a; }&#xA;.callout-warning { background:#fffbeb; border-color:#d97706; }&#xA;.faq-section {&#xA;  margin: var(--spacing-lg) 0;&#xA;  padding: var(--spacing-lg) 0;&#xA;  border-top: 2px solid var(--border-color);&#xA;}&#xA;.faq-section-title {&#xA;  color: var(--text-primary);&#xA;  font-size: clamp(1.2rem, 3vw, 1.4rem);&#xA;  font-weight: 700;&#xA;  margin-bottom: var(--spacing-lg);&#xA;  text-align: center;&#xA;}&#xA;.faq-item {&#xA;  background: var(--background-card);&#xA;  border: 1px solid var(--border-color);&#xA;  border-radius: var(--border-radius);&#xA;  margin-bottom: var(--spacing-sm);&#xA;  overflow: hidden;&#xA;  transition: all 0.3s ease;&#xA;}&#xA;.faq-item:hover {&#xA;  border-color: var(--primary-color);&#xA;  box-shadow: var(--box-shadow-hover);&#xA;  transform: translateY(-2px);&#xA;}&#xA;.faq-question {&#xA;  background: var(--background-light);&#xA;  padding: var(--spacing-sm) var(--spacing-md);&#xA;  cursor: pointer;&#xA;  position: relative;&#xA;  transition: all 0.3s ease;&#xA;  border: none;&#xA;  width: 100%;&#xA;  text-align: left;&#xA;  font-family: inherit;&#xA;}&#xA;.faq-question:hover { background: #e8f0fe; }&#xA;.faq-question-text {&#xA;  color: var(--text-primary);&#xA;  font-size: 1rem;&#xA;  font-weight: 600;&#xA;  line-height: 1.5;&#xA;  margin: 0;&#xA;  padding-right: 2rem;&#xA;}&#xA;.faq-answer {&#xA;  max-height: 0;&#xA;  overflow: hidden;&#xA;  transition: max-height 0.4s ease, padding 0.4s ease;&#xA;  padding: 0 var(--spacing-md);&#xA;}&#xA;.faq-item.active .faq-answer {&#xA;  max-height: 1000px;&#xA;  padding: 0 var(--spacing-md) var(--spacing-md);&#xA;}&#xA;.faq-answer-text {&#xA;  color: var(--text-secondary);&#xA;  font-size: 1rem;&#xA;  line-height: 1.7;&#xA;  margin: var(--spacing-sm) 0 0;&#xA;}&#xA;.about-section {&#xA;  background: var(--background-light);&#xA;  border-left: 4px solid var(--primary-color);&#xA;  border-radius: var(--border-radius);&#xA;  padding: var(--spacing-md) var(--spacing-lg);&#xA;  margin: var(--spacing-lg) 0;&#xA;}&#xA;.about-section .std-text {&#xA;  color: var(--text-secondary);&#xA;  font-size: 0.95rem;&#xA;  margin-bottom: 0;&#xA;}&#xA;.conclusion-section {&#xA;  border-top: 2px solid var(--border-color);&#xA;  padding-top: var(--spacing-lg);&#xA;  margin-top: var(--spacing-lg);&#xA;}&#xA;.conclusion-section .std-text {&#xA;  font-size: 1.05rem;&#xA;  line-height: 1.7;&#xA;}&#xA;@media (max-width: 768px) {&#xA;  .card { padding: 0.75rem; }&#xA;  .data-table { min-width: 100%; font-size: 0.8rem; }&#xA;  .data-table th, .data-table td { padding: 0.5rem 0.25rem; }&#xA;  .emoji-list { font-size: 0.95rem; }&#xA;}&#xA;@media (max-width: 480px) {&#xA;  .section-title { margin: var(--spacing-sm) 0 0.5rem; }&#xA;  .card { padding: 0.5rem; }&#xA;  .data-table th, .data-table td { padding: 0.4rem 0.2rem; font-size: 0.75rem; }&#xA;}&#xA;@media (prefers-reduced-motion: reduce) {&#xA;  *, *::before, *::after {&#xA;    animation-duration: 0.01ms !important;&#xA;    transition-duration: 0.01ms !important;&#xA;  }&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;!-- wp:html --&gt;&#xA;&lt;style&gt;&#xA;/* CSS переменные для единообразного стиля */&#xA;:root {&#xA;  --primary-color: #4285f4;&#xA;  --primary-dark: #0057cc;&#xA;  --success-color: #34a853;&#xA;  --warning-color: #fbbc05;&#xA;  --error-color: #ea4335;&#xA;  --text-primary: #333333;&#xA;  --text-secondary: #666666;&#xA;  --text-light: #888888;&#xA;  --border-color: #e0e0e0;&#xA;  --background-light: #f8f9fa;&#xA;  --background-card: #ffffff;&#xA;  --background-code: #f5f5f5;&#xA;  --warning-bg: #fff8f8;&#xA;  --spacing-xs: 0.5rem;&#xA;  --spacing-sm: 1rem;&#xA;  --spacing-md: 1.5rem;&#xA;  --spacing-lg: 2rem;&#xA;  --border-radius: 8px;&#xA;  --border-radius-sm: 4px;&#xA;  --box-shadow: 0 2px 8px rgba(0,0,0,0.08);&#xA;  --box-shadow-hover: 0 4px 16px rgba(0,0,0,0.12);&#xA;}&#xA;&#xA;/* Основные стили */&#xA;.article-marker {&#xA;  background: var(--primary-color);&#xA;  color: white;&#xA;  text-align: center;&#xA;  padding: var(--spacing-sm);&#xA;  margin: var(--spacing-lg) 0;&#xA;  font-size: 1rem;&#xA;  font-weight: 700;&#xA;  border-radius: var(--border-radius-sm);&#xA;  border: 2px dashed var(--primary-dark);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;&#xA;.main-title {&#xA;  margin-bottom: var(--spacing-md);&#xA;  font-size: clamp(1.5rem, 4vw, 2rem);&#xA;  font-weight: 700;&#xA;  color: var(--text-primary);&#xA;  line-height: 1.2;&#xA;}&#xA;&#xA;.section-title {&#xA;  color: var(--text-primary);&#xA;  margin: var(--spacing-lg) 0 var(--spacing-sm);&#xA;  font-size: clamp(1.2rem, 3vw, 1.4rem);&#xA;  font-weight: 600;&#xA;  line-height: 1.3;&#xA;}&#xA;&#xA;.subsection-title {&#xA;  color: var(--text-primary);&#xA;  margin: var(--spacing-md) 0 var(--spacing-xs);&#xA;  font-size: clamp(1.1rem, 2.5vw, 1.2rem);&#xA;  font-weight: 600;&#xA;}&#xA;&#xA;.std-text {&#xA;  font-size: 1rem;&#xA;  line-height: 1.6;&#xA;  margin-bottom: var(--spacing-sm);&#xA;  color: var(--text-primary);&#xA;}&#xA;&#xA;/* Улучшенные карточки */&#xA;.card {&#xA;  border: 1px solid var(--border-color);&#xA;  padding: var(--spacing-sm);&#xA;  background: var(--background-card);&#xA;  border-radius: var(--border-radius);&#xA;  margin-bottom: var(--spacing-md);&#xA;  box-shadow: var(--box-shadow);&#xA;  transition: transform 0.2s ease, box-shadow 0.2s ease;&#xA;}&#xA;&#xA;.card:hover {&#xA;  transform: translateY(-2px);&#xA;  box-shadow: var(--box-shadow-hover);&#xA;}&#xA;&#xA;.warning-box {&#xA;  border: 1px solid var(--error-color);&#xA;  padding: var(--spacing-sm);&#xA;  background: var(--warning-bg);&#xA;  border-radius: var(--border-radius);&#xA;  margin-bottom: var(--spacing-lg);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;&#xA;.warning-title {&#xA;  color: var(--error-color);&#xA;  margin-bottom: var(--spacing-xs);&#xA;  font-weight: 700;&#xA;  font-size: 1.1rem;&#xA;}&#xA;&#xA;/* Emoji списки с лучшими отступами */&#xA;.emoji-list {&#xA;  font-size: 1rem;&#xA;  line-height: 1.7;&#xA;  margin-bottom: 0.8rem;&#xA;  padding: 0.8rem 0;&#xA;  border-bottom: 1px solid var(--border-color);&#xA;  color: var(--text-primary);&#xA;  background: transparent;&#xA;}&#xA;&#xA;.emoji-list:last-child {&#xA;  border-bottom: none;&#xA;  margin-bottom: 0;&#xA;}&#xA;&#xA;.emoji-list strong {&#xA;  color: var(--primary-color);&#xA;  font-weight: 600;&#xA;}&#xA;&#xA;/* Адаптивные таблицы */&#xA;.table-container {&#xA;  width: 100%;&#xA;  overflow-x: auto;&#xA;  margin-bottom: var(--spacing-md);&#xA;  border-radius: var(--border-radius);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;&#xA;.data-table {&#xA;  width: 100%;&#xA;  min-width: 600px;&#xA;  border-collapse: collapse;&#xA;  background: white;&#xA;}&#xA;&#xA;.data-table th,&#xA;.data-table td {&#xA;  padding: var(--spacing-sm);&#xA;  border: 1px solid var(--border-color);&#xA;  font-size: 0.9rem;&#xA;  text-align: left;&#xA;}&#xA;&#xA;.data-table th {&#xA;  background: var(--primary-color);&#xA;  color: white;&#xA;  font-weight: 700;&#xA;  white-space: nowrap;&#xA;}&#xA;&#xA;.data-table td:first-child {&#xA;  font-weight: 700;&#xA;  font-size: 0.9rem;&#xA;}&#xA;&#xA;.data-table tbody tr:nth-child(even) {&#xA;  background: #f8f9ff;&#xA;}&#xA;&#xA;/* Убираем синий фон с первой строки tbody */&#xA;.data-table tbody tr:first-child {&#xA;  background: transparent !important;&#xA;  color: inherit !important;&#xA;}&#xA;&#xA;.data-table tbody tr:first-child td {&#xA;  background: transparent !important;&#xA;  color: inherit !important;&#xA;}&#xA;&#xA;/* Правильное чередование строк */&#xA;.data-table tbody tr:nth-child(even) td {&#xA;  background: #f8f9ff !important;&#xA;}&#xA;&#xA;.data-table tbody tr:nth-child(odd) td {&#xA;  background: white !important;&#xA;}&#xA;&#xA;.data-table tr:hover td {&#xA;  background: #e8f0fe;&#xA;}&#xA;&#xA;.data-table-caption {&#xA;  font-size: 0.9rem;&#xA;  color: var(--text-secondary);&#xA;  text-align: center;&#xA;  margin-top: var(--spacing-xs);&#xA;  font-style: italic;&#xA;}&#xA;&#xA;/* Улучшенные статус-теги */&#xA;.status-tag {&#xA;  display: inline-block;&#xA;  padding: 4px 8px;&#xA;  color: white;&#xA;  border-radius: 16px;&#xA;  font-size: 0.75rem;&#xA;  font-weight: 600;&#xA;  text-transform: uppercase;&#xA;  letter-spacing: 0.5px;&#xA;  box-shadow: 0 2px 4px rgba(0,0,0,0.2);&#xA;}&#xA;&#xA;.status-green { background: linear-gradient(135deg, var(--success-color), #2d8f47); }&#xA;.status-blue { background: linear-gradient(135deg, var(--primary-color), #3367d6); }&#xA;.status-yellow { background: linear-gradient(135deg, var(--warning-color), #f9ab00); color: #333; }&#xA;.status-red { background: linear-gradient(135deg, var(--error-color), #d33b2c); }&#xA;&#xA;/* Адаптивные блоки кода */&#xA;.code-block {&#xA;  font-family: &#39;Courier New&#39;, Consolas, Monaco, monospace;&#xA;  font-size: 0.85rem;&#xA;  background: var(--background-code);&#xA;  color: var(--text-primary);&#xA;  padding: var(--spacing-sm);&#xA;  border: 1px solid var(--border-color);&#xA;  border-radius: var(--border-radius);&#xA;  margin-bottom: var(--spacing-md);&#xA;  overflow-x: auto;&#xA;  line-height: 1.5;&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;&#xA;/* Адаптивные изображения */&#xA;.responsive-img {&#xA;  max-width: 100%;&#xA;  height: auto;&#xA;  border-radius: var(--border-radius);&#xA;  box-shadow: var(--box-shadow);&#xA;}&#xA;&#xA;.img-caption {&#xA;  font-size: 0.9rem;&#xA;  color: var(--text-secondary);&#xA;  text-align: center;&#xA;  margin-top: var(--spacing-xs);&#xA;  font-style: italic;&#xA;}&#xA;&#xA;/* Адаптивные списки */&#xA;.responsive-list {&#xA;  padding-left: 1.5rem;&#xA;  margin: var(--spacing-sm) 0;&#xA;  line-height: 1.7;&#xA;}&#xA;&#xA;.responsive-list li {&#xA;  margin-bottom: var(--spacing-xs);&#xA;  padding-left: 0.5rem;&#xA;}&#xA;&#xA;.responsive-list a {&#xA;  color: var(--primary-color);&#xA;  text-decoration: none;&#xA;  font-weight: 600;&#xA;  transition: color 0.2s ease;&#xA;}&#xA;&#xA;.responsive-list a:hover {&#xA;  color: var(--primary-dark);&#xA;  text-decoration: underline;&#xA;}&#xA;&#xA;/* Медиа-запросы для мобильных устройств */&#xA;@media (max-width: 768px) {&#xA;  .article-marker {&#xA;    font-size: 0.9rem;&#xA;    padding: 0.75rem;&#xA;    margin: var(--spacing-sm) 0;&#xA;  }&#xA;&#xA;  .card, .warning-box {&#xA;    padding: 0.75rem;&#xA;    margin-bottom: var(--spacing-sm);&#xA;  }&#xA;&#xA;  .data-table {&#xA;    min-width: 100%;&#xA;    font-size: 0.8rem;&#xA;  }&#xA;&#xA;  .data-table th,&#xA;  .data-table td {&#xA;    padding: 0.5rem 0.25rem;&#xA;  }&#xA;&#xA;  .status-tag {&#xA;    font-size: 0.7rem;&#xA;    padding: 3px 6px;&#xA;  }&#xA;&#xA;  .code-block {&#xA;    font-size: 0.8rem;&#xA;    padding: 0.75rem;&#xA;  }&#xA;&#xA;  .emoji-list {&#xA;    font-size: 0.95rem;&#xA;    line-height: 1.6;&#xA;  }&#xA;&#xA;  .responsive-list {&#xA;    padding-left: 1rem;&#xA;  }&#xA;}&#xA;&#xA;@media (max-width: 480px) {&#xA;  .section-title {&#xA;    margin: var(--spacing-sm) 0 0.5rem;&#xA;  }&#xA;&#xA;  .subsection-title {&#xA;    margin: var(--spacing-sm) 0 0.5rem;&#xA;  }&#xA;&#xA;  .card, .warning-box {&#xA;    padding: 0.5rem;&#xA;  }&#xA;&#xA;  .data-table th,&#xA;  .data-table td {&#xA;    padding: 0.4rem 0.2rem;&#xA;    font-size: 0.75rem;&#xA;  }&#xA;&#xA;  .code-block {&#xA;    font-size: 0.75rem;&#xA;    padding: 0.5rem;&#xA;  }&#xA;}&#xA;&#xA;/* Улучшение доступности */&#xA;@media (prefers-reduced-motion: reduce) {&#xA;  .card, .status-tag, .responsive-list a {&#xA;    transition: none;&#xA;  }&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;!-- /wp:html --&gt;&#xA;&lt;style&gt;:root{--text-primary:var(--text,#333333);--background-card:var(--bg-card,#ffffff);--background-light:var(--bg-subtle,#f8f9fa);--background-code:var(--bg-subtle,#f5f5f5);--border-color:var(--border,#e0e0e0)}&lt;/style&gt;&#xA;&lt;!-- /wp:html --&gt;&#xA;&lt;!-- wp:html --&gt;&#xA;&lt;script type=&#34;application/ld+json&#34;&gt;&#xA;{&#xA;  &#34;@context&#34;: &#34;https://schema.org&#34;,&#xA;  &#34;@type&#34;: &#34;FAQPage&#34;,&#xA;  &#34;mainEntity&#34;: [&#xA;    {&#xA;      &#34;@type&#34;: &#34;Question&#34;,&#xA;      &#34;name&#34;: &#34;What percentage of global IP prefixes currently have RPKI Route Origin Authorizations?&#34;,&#xA;      &#34;acceptedAnswer&#34;: {&#xA;        &#34;@type&#34;: &#34;Answer&#34;,&#xA;        &#34;text&#34;: &#34;Almost a portion of all IP prefixes globally are covered by a Route Origin Authorization. This high coverage rate indicates that most resources are ready for validation, though operators must still configure local filters to actually enforce security.&#34;&#xA;      }&#xA;    },&#xA;    {&#xA;      &#34;@type&#34;: &#34;Question&#34;,&#xA;      &#34;name&#34;: &#34;How many observed hosts reside in networks that actively reject invalid BGP routes?&#34;,&#xA;      &#34;acceptedAnswer&#34;: {&#xA;        &#34;@type&#34;: &#34;Answer&#34;,&#xA;        &#34;text&#34;: &#34;Active measurements suggest that at most a portion of observed hosts reside in networks enforcing route rejection. This low adoption means most traffic remains vulnerable to hijacking despite the widespread availability of cryptographic signing tools.&#34;&#xA;      }&#xA;    },&#xA;    {&#xA;      &#34;@type&#34;: &#34;Question&#34;,&#xA;      &#34;name&#34;: &#34;What happens if a network publishes a ROA with an incorrect maximum prefix length?&#34;,&#xA;      &#34;acceptedAnswer&#34;: {&#xA;        &#34;@type&#34;: &#34;Answer&#34;,&#xA;        &#34;text&#34;: &#34;A malformed ROA can inadvertently blackhole legitimate traffic until the error is corrected. Operators must verify configurations in staging environments because strict enforcement policies will drop valid routes that mismatch the signed record.&#34;&#xA;      }&#xA;    },&#xA;    {&#xA;      &#34;@type&#34;: &#34;Question&#34;,&#xA;      &#34;name&#34;: &#34;Does RPKI validation secure the entire AS path or just the route origin?&#34;,&#xA;      &#34;acceptedAnswer&#34;: {&#xA;        &#34;@type&#34;: &#34;Answer&#34;,&#xA;        &#34;text&#34;: &#34;The system secures the origin but does not validate the entire AS path by itself. While origin validation prevents hijacks, bad actors may still manipulate intermediate segments if specific path authorization records are absent.&#34;&#xA;      }&#xA;    },&#xA;    {&#xA;      &#34;@type&#34;: &#34;Question&#34;,&#xA;      &#34;name&#34;: &#34;Why do networks often choose permissive monitoring over strict rejection of invalid routes?&#34;,&#xA;      &#34;acceptedAnswer&#34;: {&#xA;        &#34;@type&#34;: &#34;Answer&#34;,&#xA;        &#34;text&#34;: &#34;Networks choose permissive monitoring to avoid accidental outages during the global rollout phase. Since strict rejection carries operational risk, many operators prefer to accept unknown routes while they verify their own signing records first.&#34;&#xA;      }&#xA;    }&#xA;  ]&#xA;}&#xA;&lt;/script&gt;&#xA;&lt;!-- /wp:html --&gt;&#xA;&lt;!-- wp:html --&gt;&#xA;&lt;style&gt;&#xA;.faq-section { margin: 24px 0; padding: 24px 0; border-top: 2px solid #e5e7eb; }&#xA;.faq-section-title { color: #1a1a1a; font-size: clamp(1.2rem, 3vw, 1.4rem); font-weight: 700; margin-bottom: 24px; text-align: center; }&#xA;.faq-item { background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; margin-bottom: 12px; overflow: hidden; transition: all 0.3s ease; }&#xA;.faq-item:hover { border-color: #2563eb; box-shadow: 0 4px 6px rgba(0,0,0,0.05); transform: translateY(-2px); }&#xA;.faq-question { background: #f9fafb; padding: 12px 16px; cursor: pointer; position: relative; transition: all 0.3s ease; border: none; width: 100%; text-align: left; font-family: inherit; display: block; }&#xA;.faq-question:hover { background: #e8f0fe; }&#xA;.faq-question-text { color: #1a1a1a; font-size: 1rem; font-weight: 600; line-height: 1.5; margin: 0; padding-right: 2rem; display: inline-block; }&#xA;.faq-answer { max-height: 0; overflow: hidden; transition: max-height 0.4s ease, padding 0.4s ease; padding: 0 16px; }&#xA;.faq-item.active .faq-answer { max-height: 1000px; padding: 0 16px 16px; }&#xA;.faq-answer-text { color: #4b5563; font-size: 1rem; line-height: 1.7; margin: 12px 0 0; }&#xA;&lt;/style&gt;&#xA;&lt;script&gt;&#xA;(function() {&#xA;  function initFAQ() {&#xA;    var qs = document.querySelectorAll(&#34;.faq-question&#34;);&#xA;    for (var i = 0; i &lt; qs.length; i++) {&#xA;      qs[i].addEventListener(&#34;click&#34;, function() {&#xA;        var item = this.closest(&#34;.faq-item&#34;);&#xA;        var wasActive = item.classList.contains(&#34;active&#34;);&#xA;        var allItems = document.querySelectorAll(&#34;.faq-item&#34;);&#xA;        for (var j = 0; j &lt; allItems.length; j++) { allItems[j].classList.remove(&#34;active&#34;); }&#xA;        if (!wasActive) item.classList.add(&#34;active&#34;);&#xA;        this.setAttribute(&#34;aria-expanded&#34;, String(!wasActive));&#xA;      });&#xA;    }&#xA;  }&#xA;  if (document.readyState === &#34;loading&#34;) {&#xA;    document.addEventListener(&#34;DOMContentLoaded&#34;, initFAQ);&#xA;  } else {&#xA;    initFAQ();&#xA;  }&#xA;})();&#xA;&lt;/script&gt;&#xA;&lt;!-- /wp:html --&gt;&#xA;&lt;!-- wp:html --&gt;&#xA;&lt;script type=&#34;application/ld+json&#34;&gt;&#xA;{&#xA;  &#34;@context&#34;: &#34;https://schema.org&#34;,&#xA;  &#34;@type&#34;: &#34;TechArticle&#34;,&#xA;  &#34;headline&#34;: &#34;The Role of RPKI in Modern Internet Routing Security&#34;,&#xA;  &#34;description&#34;: &#34;With almost 60% of IP prefixes now covered by Route Origin Authorizations, RPKI adoption has reached a critical mass for securing internet infrastructure. Th...&#34;,&#xA;  &#34;author&#34;: {&#xA;    &#34;@type&#34;: &#34;Person&#34;,&#xA;    &#34;name&#34;: &#34;Alexander Timokhin&#34;&#xA;  },&#xA;  &#34;datePublished&#34;: &#34;2025-05-23&#34;,&#xA;  &#34;url&#34;: &#34;https://en.wikipedia.org/wiki/Resource_Public_Key_Infrastructure&#34;,&#xA;  &#34;inLanguage&#34;: &#34;en&#34;,&#xA;  &#34;wordCount&#34;: 3177,&#xA;  &#34;publisher&#34;: {&#xA;    &#34;@type&#34;: &#34;Organization&#34;,&#xA;    &#34;name&#34;: &#34;InterLIR&#34;&#xA;  },&#xA;  &#34;speakable&#34;: {&#xA;    &#34;@type&#34;: &#34;SpeakableSpecification&#34;,&#xA;    &#34;cssSelector&#34;: [&#xA;      &#34;.article-intro&#34;,&#xA;      &#34;.faq-answer&#34;&#xA;    ]&#xA;  },&#xA;  &#34;about&#34;: [&#xA;    {&#xA;      &#34;@type&#34;: &#34;Thing&#34;,&#xA;      &#34;name&#34;: &#34;Resource Public Key Infrastructure&#34;&#xA;    }&#xA;  ]&#xA;}&#xA;&lt;/script&gt;&#xA;&lt;!-- /wp:html --&gt;&#xA;&lt;!-- wp:paragraph {&#34;className&#34;:&#34;std-text&#34;} --&gt;&#xA;&lt;!-- /wp:paragraph --&gt;&#xA;&lt;!-- wp:paragraph {&#34;className&#34;:&#34;std-text&#34;} --&gt;&#xA;&lt;p class=&#34;std-text&#34;&gt;&lt;strong&gt;&lt;a href=&#34;https://datatracker.ietf.org/doc/html/rfc6480&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;RPKI&lt;/a&gt; adoption&lt;/strong&gt; has hit a tipping point. With almost a majority of IP prefixes now covered by Route Origin Authorizations, the framework is no longer theoretical; it is the definitive mechanism for binding IP addresses to legitimate holders. The system mirrors the hierarchical distribution of internet number resources, stretching from &lt;strong&gt;IANA&lt;/strong&gt; down to regional registries.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
