﻿<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://dh.aks.ac.kr/Edu/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
		<id>https://dh.aks.ac.kr/Edu/wiki/index.php?action=history&amp;feed=atom&amp;title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8</id>
		<title>CPU게이트 - 편집 역사</title>
		<link rel="self" type="application/atom+xml" href="https://dh.aks.ac.kr/Edu/wiki/index.php?action=history&amp;feed=atom&amp;title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8"/>
		<link rel="alternate" type="text/html" href="https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;action=history"/>
		<updated>2026-04-21T04:44:33Z</updated>
		<subtitle>이 문서의 편집 역사</subtitle>
		<generator>MediaWiki 1.23.13</generator>

	<entry>
		<id>https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104528&amp;oldid=prev</id>
		<title>2019년 6월 22일 (토) 02:10에 대한 건국대이성민의 편집</title>
		<link rel="alternate" type="text/html" href="https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104528&amp;oldid=prev"/>
				<updated>2019-06-22T02:10:23Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2019년 6월 22일 (토) 02:10 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;199번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;199번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{NetworkGraph | title=&amp;quot;인텔&amp;quot;_CPU게이트.lst}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{NetworkGraph | title=&amp;quot;인텔&amp;quot;_CPU게이트.lst}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;스펙터와 멜트다운 취약점을 필두로 한 CPU게이트는 IT업계 전체를 뒤흔들었음. 취약점의 대상이 되는 분기 예측, 추측 실행, 비순차적 명령어 처리는 대다수의 현대 프로세서들이 사용하는 기술이기에, 개인 컴퓨터, 모바일 기기, 클라우드 등 대부분의 기기들은 공격으로부터 자유롭지 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;못함&lt;/del&gt;. 특히 전 세계 80% 이상의 PC와 서버에서 사용되는 인텔 CPU의 피해 가능성은, 1995년 이후의 거의 모든 인텔 프로세서들이 공격에 영향을 받는다는 공식 자료의 언급대로, 매우 높았으며 이 사태는 인텔에게 최악의 위기로 다가왔음. '인텔 CPU 게이트'라는 명칭은 이러한 인텔의 상황에서 비롯된 것임. 놀랍게도 AMD의 CPU들은 비순차적 명령어 처리 기술을 사용하면서도 멜트다운 공격에 영향 받지 않았는데, 이는 인텔과는 다른 마이크로아키텍처 설계 방식에서 비롯된 차이로, 마이크로 연산이 완료되기 전에 빠른 예외 처리를 적용하는 방식을 택하였기에 멜트다운 공격을 피할 수 있었던 것. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;스펙터와 멜트다운 취약점을 필두로 한 CPU게이트는 IT업계 전체를 뒤흔들었음. 취약점의 대상이 되는 분기 예측, 추측 실행, 비순차적 명령어 처리는 대다수의 현대 프로세서들이 사용하는 기술이기에, 개인 컴퓨터, 모바일 기기, 클라우드 등 대부분의 기기들은 공격으로부터 자유롭지 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;못하였음&lt;/ins&gt;. 특히 전 세계 80% 이상의 PC와 서버에서 사용되는 인텔 CPU의 피해 가능성은, 1995년 이후의 거의 모든 인텔 프로세서들이 공격에 영향을 받는다는 공식 자료의 언급대로, 매우 높았으며 이 사태는 인텔에게 최악의 위기로 다가왔음. '인텔 CPU 게이트'라는 명칭은 이러한 인텔의 상황에서 비롯된 것임. 놀랍게도 AMD의 CPU들은 비순차적 명령어 처리 기술을 사용하면서도 멜트다운 공격에 영향 받지 않았는데, 이는 인텔과는 다른 마이크로아키텍처 설계 방식에서 비롯된 차이로, 마이크로 연산이 완료되기 전에 빠른 예외 처리를 적용하는 방식을 택하였기에 멜트다운 공격을 피할 수 있었던 것. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==각주==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==각주==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>건국대이성민</name></author>	</entry>

	<entry>
		<id>https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104501&amp;oldid=prev</id>
		<title>2019년 6월 21일 (금) 18:24에 대한 건국대이성민의 편집</title>
		<link rel="alternate" type="text/html" href="https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104501&amp;oldid=prev"/>
				<updated>2019-06-21T18:24:20Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2019년 6월 21일 (금) 18:24 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;199번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;199번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{NetworkGraph | title=&amp;quot;인텔&amp;quot;_CPU게이트.lst}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{NetworkGraph | title=&amp;quot;인텔&amp;quot;_CPU게이트.lst}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;스펙터와 멜트다운 취약점을 필두로 한 CPU게이트는 IT업계 전체를 뒤흔들었음. 취약점의 대상이 되는 분기 예측, 추측 실행, 비순차적 명령어 처리는 대다수의 현대 프로세서들이 사용하는 기술이기에, 개인 컴퓨터, 모바일 기기, 클라우드 등 대부분의 기기들은 공격으로부터 자유롭지 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;못했음&lt;/del&gt;. 특히 전 세계 80% 이상의 PC와 서버에서 사용되는 인텔 CPU의 피해 가능성은, 1995년 이후의 거의 모든 인텔 프로세서들이 공격에 영향을 받는다는 공식 자료의 언급대로, 매우 높았으며 이 사태는 인텔에게 최악의 위기로 다가왔음. '인텔 CPU 게이트'라는 명칭은 이러한 인텔의 상황에서 비롯된 것임. 놀랍게도 AMD의 CPU들은 비순차적 명령어 처리 기술을 사용하면서도 멜트다운 공격에 영향 받지 않았는데, 이는 인텔과는 다른 마이크로아키텍처 설계 방식에서 비롯된 차이로, 마이크로 연산이 완료되기 전에 빠른 예외 처리를 적용하는 방식을 택하였기에 멜트다운 공격을 피할 수 있었던 것. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;스펙터와 멜트다운 취약점을 필두로 한 CPU게이트는 IT업계 전체를 뒤흔들었음. 취약점의 대상이 되는 분기 예측, 추측 실행, 비순차적 명령어 처리는 대다수의 현대 프로세서들이 사용하는 기술이기에, 개인 컴퓨터, 모바일 기기, 클라우드 등 대부분의 기기들은 공격으로부터 자유롭지 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;못함&lt;/ins&gt;. 특히 전 세계 80% 이상의 PC와 서버에서 사용되는 인텔 CPU의 피해 가능성은, 1995년 이후의 거의 모든 인텔 프로세서들이 공격에 영향을 받는다는 공식 자료의 언급대로, 매우 높았으며 이 사태는 인텔에게 최악의 위기로 다가왔음. '인텔 CPU 게이트'라는 명칭은 이러한 인텔의 상황에서 비롯된 것임. 놀랍게도 AMD의 CPU들은 비순차적 명령어 처리 기술을 사용하면서도 멜트다운 공격에 영향 받지 않았는데, 이는 인텔과는 다른 마이크로아키텍처 설계 방식에서 비롯된 차이로, 마이크로 연산이 완료되기 전에 빠른 예외 처리를 적용하는 방식을 택하였기에 멜트다운 공격을 피할 수 있었던 것. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==각주==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==각주==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>건국대이성민</name></author>	</entry>

	<entry>
		<id>https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104496&amp;oldid=prev</id>
		<title>2019년 6월 21일 (금) 18:22에 대한 건국대이성민의 편집</title>
		<link rel="alternate" type="text/html" href="https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104496&amp;oldid=prev"/>
				<updated>2019-06-21T18:22:58Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2019년 6월 21일 (금) 18:22 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;190번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;190번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# RCX 레지스터에 적재된 타깃 커널 주소에 위치한 바이트 값을, AL로 나타내어지는 RAX 레지스터의 최하위 바이트로 옮김. MOV 명령어는 코어에 의해 인출되어, 마이크로 연산&amp;lt;ref&amp;gt;하나의 명령어는 여러 개의 마이크로 연산으로서 수행됨.&amp;lt;/ref&amp;gt;으로 해독되고, 할당되어, 리오더 버퍼로 보내짐. 아키텍처의 영역에 속하는 레지스터들(예를 들어 RAX와 RCX)은 비순차적 명령어 처리를 가능케 하는 하위의 물리 레지스터들에 매핑됨. 파이프라인을 가능한 한 최대로 활용하기 위해, 후속 명령어들(shl ~ mov)도 함께 해독되고 마이크로 연산으로 할당됨. 마이크로 연산들은 일치하는 실행 유닛에 의해 실행되기 위해 기다리는, 명령어 대기열로 옮겨짐. 피연산자가 아직 계산되지 않았거나, 실행 유닛이 이미 해당하는 용량을 수용하고 있다면 마이크로 연산의 실행은 지연될 수 있음. 첫 mov 명령어에서 커널 주소가 도착했을 때, 이미 CPU가 후속 명령어들을 비순차적 명령어 처리의 일부로서 보냈을 가능성이 크며, 그들의 마이크로 연산들은 명령어 대기열에서 커널 주소의 내용이 도착하기를 기다리고 있을 것임. 공통 데이터 버스에 인출된 데이터가 도착하는 대로, 마이크로 연산들은 그들의 실행을 시작할 수 있음. 마이크로 연산들이 실행을 끝내면, 그들은 순서대로 완료하며, 그 결과들이 아키텍처 상태에 반영됨. 완료 과정 중에, 명령어의 실행 도중 발생한 어떠한 인터럽트나 예외들이 처리됨. 따라서, 만약 커널 주소를 로드하는 MOV 명령어가 완료한다면, 예외가 등록되고, 비순차적으로 실행된 모든 후속 명령어들의 결과들을 제거하기 위해 파이프라인이 flush될 것. 하지만, 이 예외를 일으키는 것과 공격의 진행 사이엔 경쟁 상태&amp;lt;ref&amp;gt;둘 이상의 입력 또는 조작의 타이밍이나 순서가 결과값에 영향을 줄 수 있는 상태를 말함.&amp;lt;/ref&amp;gt;가 있음. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# RCX 레지스터에 적재된 타깃 커널 주소에 위치한 바이트 값을, AL로 나타내어지는 RAX 레지스터의 최하위 바이트로 옮김. MOV 명령어는 코어에 의해 인출되어, 마이크로 연산&amp;lt;ref&amp;gt;하나의 명령어는 여러 개의 마이크로 연산으로서 수행됨.&amp;lt;/ref&amp;gt;으로 해독되고, 할당되어, 리오더 버퍼로 보내짐. 아키텍처의 영역에 속하는 레지스터들(예를 들어 RAX와 RCX)은 비순차적 명령어 처리를 가능케 하는 하위의 물리 레지스터들에 매핑됨. 파이프라인을 가능한 한 최대로 활용하기 위해, 후속 명령어들(shl ~ mov)도 함께 해독되고 마이크로 연산으로 할당됨. 마이크로 연산들은 일치하는 실행 유닛에 의해 실행되기 위해 기다리는, 명령어 대기열로 옮겨짐. 피연산자가 아직 계산되지 않았거나, 실행 유닛이 이미 해당하는 용량을 수용하고 있다면 마이크로 연산의 실행은 지연될 수 있음. 첫 mov 명령어에서 커널 주소가 도착했을 때, 이미 CPU가 후속 명령어들을 비순차적 명령어 처리의 일부로서 보냈을 가능성이 크며, 그들의 마이크로 연산들은 명령어 대기열에서 커널 주소의 내용이 도착하기를 기다리고 있을 것임. 공통 데이터 버스에 인출된 데이터가 도착하는 대로, 마이크로 연산들은 그들의 실행을 시작할 수 있음. 마이크로 연산들이 실행을 끝내면, 그들은 순서대로 완료하며, 그 결과들이 아키텍처 상태에 반영됨. 완료 과정 중에, 명령어의 실행 도중 발생한 어떠한 인터럽트나 예외들이 처리됨. 따라서, 만약 커널 주소를 로드하는 MOV 명령어가 완료한다면, 예외가 등록되고, 비순차적으로 실행된 모든 후속 명령어들의 결과들을 제거하기 위해 파이프라인이 flush될 것. 하지만, 이 예외를 일으키는 것과 공격의 진행 사이엔 경쟁 상태&amp;lt;ref&amp;gt;둘 이상의 입력 또는 조작의 타이밍이나 순서가 결과값에 영향을 줄 수 있는 상태를 말함.&amp;lt;/ref&amp;gt;가 있음. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 앞의 단계의 비순차적으로 실행된 명령어 시퀀스는 순간적인 명령어 시퀀스가 되는 방향으로 선택되어야 함. 만약 이들 순간적인 명령어 시퀀스가 MOV 명령어가 완료하기 전에 실행된다면, 그리고 순간적인 명령어 시퀀스가 비밀 데이터를 기반으로 연산을 수행했다면, 이는 비밀을 공격자에게 전달하기 위한 수단으로 활용될 수 있을 것임. shl 명령어에서 앞의 단계의 비밀 값이 페이지 크기(예를 들어 4KB)로 곱해짐. 비밀의 곱은 배열에의 접근들이 각각 큰 공간적 거리를 둠을 보장함. 이는 하드웨어 프리패처가 캐시에 인접한 메모리 위치를 로딩하는 것을 방지. 여기서, 우리는 한 번에 하나의 바이트씩만을 읽으며, 이런 이유로 우리의 조사 배열은 4KB 페이지를 가정하여, 256 × 4096 byte 배열을 형성함. 비순차적 명령어 처리에서 우리는 레지스터 값 '0'에 대해 노이즈 편향을 가짐. 이러한 이유로, 순간적인 명령어 시퀀스에 재시도 로직을 둠. 마지막 mov 명령에서, 곱해진 비밀 값은 조사 배열의 기저 주소에 더해지고, 은닉 채널의 타깃 주소를 형성함. 이 주소는 연관된 캐시 라인을 캐시하기 위해 읽혀짐. 주소는 요청한 코어의 L1 데이터 캐시에 로드될 것이고, 포괄성으로 인해, 또한 다른 코어에 의해서도 읽히는 L3 캐시에도 존재할 것. 그 결과 순간적인 명령어 시퀀스는 앞의 단계에서 읽힌 비밀 값에 기반해 캐시에 영향을 미침. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 앞의 단계의 비순차적으로 실행된 명령어 시퀀스는 순간적인 명령어 시퀀스가 되는 방향으로 선택되어야 함. 만약 이들 순간적인 명령어 시퀀스가 MOV 명령어가 완료하기 전에 실행된다면, 그리고 순간적인 명령어 시퀀스가 비밀 데이터를 기반으로 연산을 수행했다면, 이는 비밀을 공격자에게 전달하기 위한 수단으로 활용될 수 있을 것임. shl 명령어에서 앞의 단계의 비밀 값이 페이지 크기(예를 들어 4KB)로 곱해짐. 비밀의 곱은 배열에의 접근들이 각각 큰 공간적 거리를 둠을 보장함. 이는 하드웨어 프리패처가 캐시에 인접한 메모리 위치를 로딩하는 것을 방지. 여기서, 우리는 한 번에 하나의 바이트씩만을 읽으며, 이런 이유로 우리의 조사 배열은 4KB 페이지를 가정하여, 256 × 4096 byte 배열을 형성함. 비순차적 명령어 처리에서 우리는 레지스터 값 '0'에 대해 노이즈 편향을 가짐. 이러한 이유로, 순간적인 명령어 시퀀스에 재시도 로직을 둠. 마지막 mov 명령에서, 곱해진 비밀 값은 조사 배열의 기저 주소에 더해지고, 은닉 채널의 타깃 주소를 형성함. 이 주소는 연관된 캐시 라인을 캐시하기 위해 읽혀짐. 주소는 요청한 코어의 L1 데이터 캐시에 로드될 것이고, 포괄성으로 인해, 또한 다른 코어에 의해서도 읽히는 L3 캐시에도 존재할 것. 그 결과 순간적인 명령어 시퀀스는 앞의 단계에서 읽힌 비밀 값에 기반해 캐시에 영향을 미침. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 마이크로아키텍처 영역의 부채널 공격을 수행하여 비밀 값을 복원. 이는 캐시 상태를 아키텍처 영역의 상태로 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;옮김&lt;/del&gt;. 순간적인 명령어 시퀀스가 실행될 때, 정확히 조사 배열의 한 캐시 라인이 캐시됨. 조사 배열 내의 캐시된 캐시 라인의 위치는 오직 앞에서 읽은 비밀에만 의존함. 따라서, 공격자는 조사 배열의 모든 256 페이지들을 돌며 페이지 상의 모든 첫 번째 캐시 라인에 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;대한 &lt;/del&gt;접근 시간을 측정. 캐시된 캐시 라인을 포함하는 페이지의 번호는 비밀 값과 정확히 일치함.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 마이크로아키텍처 영역의 부채널 공격을 수행하여 비밀 값을 복원. 이는 캐시 상태를 아키텍처 영역의 상태로 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;옮기는 것&lt;/ins&gt;. 순간적인 명령어 시퀀스가 실행될 때, 정확히 조사 배열의 한 캐시 라인이 캐시됨. 조사 배열 내의 캐시된 캐시 라인의 위치는 오직 앞에서 읽은 비밀에만 의존함. 따라서, 공격자는 조사 배열의 모든 256 페이지들을 돌며 페이지 상의 모든 첫 번째 캐시 라인에 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;대해 &lt;/ins&gt;접근 시간을 측정. 캐시된 캐시 라인을 포함하는 페이지의 번호는 비밀 값과 정확히 일치함.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''시연 영상'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''시연 영상'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;html&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;html&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>건국대이성민</name></author>	</entry>

	<entry>
		<id>https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104493&amp;oldid=prev</id>
		<title>2019년 6월 21일 (금) 18:20에 대한 건국대이성민의 편집</title>
		<link rel="alternate" type="text/html" href="https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104493&amp;oldid=prev"/>
				<updated>2019-06-21T18:20:26Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2019년 6월 21일 (금) 18:20 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;189번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;189번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# RCX 레지스터에 적재된 타깃 커널 주소에 위치한 바이트 값을, AL로 나타내어지는 RAX 레지스터의 최하위 바이트로 옮김. MOV 명령어는 코어에 의해 인출되어, 마이크로 연산&amp;lt;ref&amp;gt;하나의 명령어는 여러 개의 마이크로 연산으로서 수행됨.&amp;lt;/ref&amp;gt;으로 해독되고, 할당되어, 리오더 버퍼로 보내짐. 아키텍처의 영역에 속하는 레지스터들(예를 들어 RAX와 RCX)은 비순차적 명령어 처리를 가능케 하는 하위의 물리 레지스터들에 매핑됨. 파이프라인을 가능한 한 최대로 활용하기 위해, 후속 명령어들(shl ~ mov)도 함께 해독되고 마이크로 연산으로 할당됨. 마이크로 연산들은 일치하는 실행 유닛에 의해 실행되기 위해 기다리는, 명령어 대기열로 옮겨짐. 피연산자가 아직 계산되지 않았거나, 실행 유닛이 이미 해당하는 용량을 수용하고 있다면 마이크로 연산의 실행은 지연될 수 있음. 첫 mov 명령어에서 커널 주소가 도착했을 때, 이미 CPU가 후속 명령어들을 비순차적 명령어 처리의 일부로서 보냈을 가능성이 크며, 그들의 마이크로 연산들은 명령어 대기열에서 커널 주소의 내용이 도착하기를 기다리고 있을 것임. 공통 데이터 버스에 인출된 데이터가 도착하는 대로, 마이크로 연산들은 그들의 실행을 시작할 수 있음. 마이크로 연산들이 실행을 끝내면, 그들은 순서대로 완료하며, 그 결과들이 아키텍처 상태에 반영됨. 완료 과정 중에, 명령어의 실행 도중 발생한 어떠한 인터럽트나 예외들이 처리됨. 따라서, 만약 커널 주소를 로드하는 MOV 명령어가 완료한다면, 예외가 등록되고, 비순차적으로 실행된 모든 후속 명령어들의 결과들을 제거하기 위해 파이프라인이 flush될 것. 하지만, 이 예외를 일으키는 것과 공격의 진행 사이엔 경쟁 상태&amp;lt;ref&amp;gt;둘 이상의 입력 또는 조작의 타이밍이나 순서가 결과값에 영향을 줄 수 있는 상태를 말함.&amp;lt;/ref&amp;gt;가 있음. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# RCX 레지스터에 적재된 타깃 커널 주소에 위치한 바이트 값을, AL로 나타내어지는 RAX 레지스터의 최하위 바이트로 옮김. MOV 명령어는 코어에 의해 인출되어, 마이크로 연산&amp;lt;ref&amp;gt;하나의 명령어는 여러 개의 마이크로 연산으로서 수행됨.&amp;lt;/ref&amp;gt;으로 해독되고, 할당되어, 리오더 버퍼로 보내짐. 아키텍처의 영역에 속하는 레지스터들(예를 들어 RAX와 RCX)은 비순차적 명령어 처리를 가능케 하는 하위의 물리 레지스터들에 매핑됨. 파이프라인을 가능한 한 최대로 활용하기 위해, 후속 명령어들(shl ~ mov)도 함께 해독되고 마이크로 연산으로 할당됨. 마이크로 연산들은 일치하는 실행 유닛에 의해 실행되기 위해 기다리는, 명령어 대기열로 옮겨짐. 피연산자가 아직 계산되지 않았거나, 실행 유닛이 이미 해당하는 용량을 수용하고 있다면 마이크로 연산의 실행은 지연될 수 있음. 첫 mov 명령어에서 커널 주소가 도착했을 때, 이미 CPU가 후속 명령어들을 비순차적 명령어 처리의 일부로서 보냈을 가능성이 크며, 그들의 마이크로 연산들은 명령어 대기열에서 커널 주소의 내용이 도착하기를 기다리고 있을 것임. 공통 데이터 버스에 인출된 데이터가 도착하는 대로, 마이크로 연산들은 그들의 실행을 시작할 수 있음. 마이크로 연산들이 실행을 끝내면, 그들은 순서대로 완료하며, 그 결과들이 아키텍처 상태에 반영됨. 완료 과정 중에, 명령어의 실행 도중 발생한 어떠한 인터럽트나 예외들이 처리됨. 따라서, 만약 커널 주소를 로드하는 MOV 명령어가 완료한다면, 예외가 등록되고, 비순차적으로 실행된 모든 후속 명령어들의 결과들을 제거하기 위해 파이프라인이 flush될 것. 하지만, 이 예외를 일으키는 것과 공격의 진행 사이엔 경쟁 상태&amp;lt;ref&amp;gt;둘 이상의 입력 또는 조작의 타이밍이나 순서가 결과값에 영향을 줄 수 있는 상태를 말함.&amp;lt;/ref&amp;gt;가 있음. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 앞의 단계의 비순차적으로 실행된 명령어 시퀀스는 순간적인 명령어 시퀀스가 되는 방향으로 선택되어야 함. 만약 이들 순간적인 명령어 시퀀스가 MOV 명령어가 완료하기 전에 실행된다면, 그리고 순간적인 명령어 시퀀스가 비밀 데이터를 기반으로 연산을 수행했다면, 이는 비밀을 공격자에게 전달하기 위한 수단으로 활용될 수 있을 것임. shl 명령어에서 앞의 단계의 비밀 값이 페이지 크기(예를 들어 4KB)로 곱해짐. 비밀의 곱은 배열에의 접근들이 각각 큰 공간적 거리를 둠을 보장함. 이는 하드웨어 프리패처가 캐시에 인접한 메모리 위치를 로딩하는 것을 방지. 여기서, 우리는 한 번에 하나의 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;바이트씩을 &lt;/del&gt;읽으며, 이런 이유로 우리의 조사 배열은 4KB 페이지를 가정하여, 256 × 4096 byte &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;배열임&lt;/del&gt;. 비순차적 명령어 처리에서 우리는 레지스터 값 '0'에 대해 노이즈 편향을 가짐. 이러한 이유로, 순간적인 명령어 시퀀스에 재시도 로직을 둠. 마지막 mov 명령에서, 곱해진 비밀 값은 조사 배열의 기저 주소에 더해지고, 은닉 채널의 타깃 주소를 형성함. 이 주소는 연관된 캐시 라인을 캐시하기 위해 읽혀짐. 주소는 요청한 코어의 L1 데이터 캐시에 로드될 것이고, 포괄성으로 인해, 또한 다른 코어에 의해서도 읽히는 L3 캐시에도 존재할 것. 그 결과 순간적인 명령어 시퀀스는 앞의 단계에서 읽힌 비밀 값에 기반해 캐시에 영향을 미침. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 앞의 단계의 비순차적으로 실행된 명령어 시퀀스는 순간적인 명령어 시퀀스가 되는 방향으로 선택되어야 함. 만약 이들 순간적인 명령어 시퀀스가 MOV 명령어가 완료하기 전에 실행된다면, 그리고 순간적인 명령어 시퀀스가 비밀 데이터를 기반으로 연산을 수행했다면, 이는 비밀을 공격자에게 전달하기 위한 수단으로 활용될 수 있을 것임. shl 명령어에서 앞의 단계의 비밀 값이 페이지 크기(예를 들어 4KB)로 곱해짐. 비밀의 곱은 배열에의 접근들이 각각 큰 공간적 거리를 둠을 보장함. 이는 하드웨어 프리패처가 캐시에 인접한 메모리 위치를 로딩하는 것을 방지. 여기서, 우리는 한 번에 하나의 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;바이트씩만을 &lt;/ins&gt;읽으며, 이런 이유로 우리의 조사 배열은 4KB 페이지를 가정하여, 256 × 4096 byte &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;배열을 형성함&lt;/ins&gt;. 비순차적 명령어 처리에서 우리는 레지스터 값 '0'에 대해 노이즈 편향을 가짐. 이러한 이유로, 순간적인 명령어 시퀀스에 재시도 로직을 둠. 마지막 mov 명령에서, 곱해진 비밀 값은 조사 배열의 기저 주소에 더해지고, 은닉 채널의 타깃 주소를 형성함. 이 주소는 연관된 캐시 라인을 캐시하기 위해 읽혀짐. 주소는 요청한 코어의 L1 데이터 캐시에 로드될 것이고, 포괄성으로 인해, 또한 다른 코어에 의해서도 읽히는 L3 캐시에도 존재할 것. 그 결과 순간적인 명령어 시퀀스는 앞의 단계에서 읽힌 비밀 값에 기반해 캐시에 영향을 미침. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 마이크로아키텍처 영역의 부채널 공격을 수행하여 비밀 값을 복원. 이는 캐시 상태를 아키텍처 영역의 상태로 옮김. 순간적인 명령어 시퀀스가 실행될 때, 정확히 조사 배열의 한 캐시 라인이 캐시됨. 조사 배열 내의 캐시된 캐시 라인의 위치는 오직 앞에서 읽은 비밀에만 의존함. 따라서, 공격자는 조사 배열의 모든 256 페이지들을 돌며 페이지 상의 모든 첫 번째 캐시 라인에 대한 접근 시간을 측정. 캐시된 캐시 라인을 포함하는 페이지의 번호는 비밀 값과 정확히 일치함.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 마이크로아키텍처 영역의 부채널 공격을 수행하여 비밀 값을 복원. 이는 캐시 상태를 아키텍처 영역의 상태로 옮김. 순간적인 명령어 시퀀스가 실행될 때, 정확히 조사 배열의 한 캐시 라인이 캐시됨. 조사 배열 내의 캐시된 캐시 라인의 위치는 오직 앞에서 읽은 비밀에만 의존함. 따라서, 공격자는 조사 배열의 모든 256 페이지들을 돌며 페이지 상의 모든 첫 번째 캐시 라인에 대한 접근 시간을 측정. 캐시된 캐시 라인을 포함하는 페이지의 번호는 비밀 값과 정확히 일치함.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''시연 영상'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''시연 영상'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>건국대이성민</name></author>	</entry>

	<entry>
		<id>https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104492&amp;oldid=prev</id>
		<title>2019년 6월 21일 (금) 18:19에 대한 건국대이성민의 편집</title>
		<link rel="alternate" type="text/html" href="https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104492&amp;oldid=prev"/>
				<updated>2019-06-21T18:19:13Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2019년 6월 21일 (금) 18:19 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;189번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;189번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# RCX 레지스터에 적재된 타깃 커널 주소에 위치한 바이트 값을, AL로 나타내어지는 RAX 레지스터의 최하위 바이트로 옮김. MOV 명령어는 코어에 의해 인출되어, 마이크로 연산&amp;lt;ref&amp;gt;하나의 명령어는 여러 개의 마이크로 연산으로서 수행됨.&amp;lt;/ref&amp;gt;으로 해독되고, 할당되어, 리오더 버퍼로 보내짐. 아키텍처의 영역에 속하는 레지스터들(예를 들어 RAX와 RCX)은 비순차적 명령어 처리를 가능케 하는 하위의 물리 레지스터들에 매핑됨. 파이프라인을 가능한 한 최대로 활용하기 위해, 후속 명령어들(shl ~ mov)도 함께 해독되고 마이크로 연산으로 할당됨. 마이크로 연산들은 일치하는 실행 유닛에 의해 실행되기 위해 기다리는, 명령어 대기열로 옮겨짐. 피연산자가 아직 계산되지 않았거나, 실행 유닛이 이미 해당하는 용량을 수용하고 있다면 마이크로 연산의 실행은 지연될 수 있음. 첫 mov 명령어에서 커널 주소가 도착했을 때, 이미 CPU가 후속 명령어들을 비순차적 명령어 처리의 일부로서 보냈을 가능성이 크며, 그들의 마이크로 연산들은 명령어 대기열에서 커널 주소의 내용이 도착하기를 기다리고 있을 것임. 공통 데이터 버스에 인출된 데이터가 도착하는 대로, 마이크로 연산들은 그들의 실행을 시작할 수 있음. 마이크로 연산들이 실행을 끝내면, 그들은 순서대로 완료하며, 그 결과들이 아키텍처 상태에 반영됨. 완료 과정 중에, 명령어의 실행 도중 발생한 어떠한 인터럽트나 예외들이 처리됨. 따라서, 만약 커널 주소를 로드하는 MOV 명령어가 완료한다면, 예외가 등록되고, 비순차적으로 실행된 모든 후속 명령어들의 결과들을 제거하기 위해 파이프라인이 flush될 것. 하지만, 이 예외를 일으키는 것과 공격의 진행 사이엔 경쟁 상태&amp;lt;ref&amp;gt;둘 이상의 입력 또는 조작의 타이밍이나 순서가 결과값에 영향을 줄 수 있는 상태를 말함.&amp;lt;/ref&amp;gt;가 있음. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# RCX 레지스터에 적재된 타깃 커널 주소에 위치한 바이트 값을, AL로 나타내어지는 RAX 레지스터의 최하위 바이트로 옮김. MOV 명령어는 코어에 의해 인출되어, 마이크로 연산&amp;lt;ref&amp;gt;하나의 명령어는 여러 개의 마이크로 연산으로서 수행됨.&amp;lt;/ref&amp;gt;으로 해독되고, 할당되어, 리오더 버퍼로 보내짐. 아키텍처의 영역에 속하는 레지스터들(예를 들어 RAX와 RCX)은 비순차적 명령어 처리를 가능케 하는 하위의 물리 레지스터들에 매핑됨. 파이프라인을 가능한 한 최대로 활용하기 위해, 후속 명령어들(shl ~ mov)도 함께 해독되고 마이크로 연산으로 할당됨. 마이크로 연산들은 일치하는 실행 유닛에 의해 실행되기 위해 기다리는, 명령어 대기열로 옮겨짐. 피연산자가 아직 계산되지 않았거나, 실행 유닛이 이미 해당하는 용량을 수용하고 있다면 마이크로 연산의 실행은 지연될 수 있음. 첫 mov 명령어에서 커널 주소가 도착했을 때, 이미 CPU가 후속 명령어들을 비순차적 명령어 처리의 일부로서 보냈을 가능성이 크며, 그들의 마이크로 연산들은 명령어 대기열에서 커널 주소의 내용이 도착하기를 기다리고 있을 것임. 공통 데이터 버스에 인출된 데이터가 도착하는 대로, 마이크로 연산들은 그들의 실행을 시작할 수 있음. 마이크로 연산들이 실행을 끝내면, 그들은 순서대로 완료하며, 그 결과들이 아키텍처 상태에 반영됨. 완료 과정 중에, 명령어의 실행 도중 발생한 어떠한 인터럽트나 예외들이 처리됨. 따라서, 만약 커널 주소를 로드하는 MOV 명령어가 완료한다면, 예외가 등록되고, 비순차적으로 실행된 모든 후속 명령어들의 결과들을 제거하기 위해 파이프라인이 flush될 것. 하지만, 이 예외를 일으키는 것과 공격의 진행 사이엔 경쟁 상태&amp;lt;ref&amp;gt;둘 이상의 입력 또는 조작의 타이밍이나 순서가 결과값에 영향을 줄 수 있는 상태를 말함.&amp;lt;/ref&amp;gt;가 있음. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 앞의 단계의 비순차적으로 실행된 명령어 시퀀스는 순간적인 명령어 시퀀스가 되는 방향으로 선택되어야 함. 만약 이들 순간적인 명령어 시퀀스가 MOV 명령어가 완료하기 전에 실행된다면, 그리고 순간적인 명령어 시퀀스가 비밀 데이터를 기반으로 연산을 수행했다면, 이는 비밀을 공격자에게 전달하기 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;위해 &lt;/del&gt;활용될 수 있을 것임. shl 명령어에서 앞의 단계의 비밀 값이 페이지 크기(예를 들어 4KB)로 곱해짐. 비밀의 곱은 배열에의 접근들이 각각 큰 공간적 거리를 둠을 보장함. 이는 하드웨어 프리패처가 캐시에 인접한 메모리 위치를 로딩하는 것을 방지. 여기서, 우리는 한 번에 하나의 바이트씩을 읽으며, 이런 이유로 우리의 조사 배열은 4KB 페이지를 가정하여, 256 × 4096 byte 배열임. 비순차적 명령어 처리에서 우리는 레지스터 값 '0'에 대해 노이즈 편향을 가짐. 이러한 이유로, 순간적인 명령어 시퀀스에 재시도 로직을 둠. 마지막 mov 명령에서, 곱해진 비밀 값은 조사 배열의 기저 주소에 더해지고, 은닉 채널의 타깃 주소를 형성함. 이 주소는 연관된 캐시 라인을 캐시하기 위해 읽혀짐. 주소는 요청한 코어의 L1 데이터 캐시에 로드될 것이고, 포괄성으로 인해, 또한 다른 코어에 의해서도 읽히는 L3 캐시에도 존재할 것. 그 결과 순간적인 명령어 시퀀스는 앞의 단계에서 읽힌 비밀 값에 기반해 캐시에 영향을 미침. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 앞의 단계의 비순차적으로 실행된 명령어 시퀀스는 순간적인 명령어 시퀀스가 되는 방향으로 선택되어야 함. 만약 이들 순간적인 명령어 시퀀스가 MOV 명령어가 완료하기 전에 실행된다면, 그리고 순간적인 명령어 시퀀스가 비밀 데이터를 기반으로 연산을 수행했다면, 이는 비밀을 공격자에게 전달하기 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;위한 수단으로 &lt;/ins&gt;활용될 수 있을 것임. shl 명령어에서 앞의 단계의 비밀 값이 페이지 크기(예를 들어 4KB)로 곱해짐. 비밀의 곱은 배열에의 접근들이 각각 큰 공간적 거리를 둠을 보장함. 이는 하드웨어 프리패처가 캐시에 인접한 메모리 위치를 로딩하는 것을 방지. 여기서, 우리는 한 번에 하나의 바이트씩을 읽으며, 이런 이유로 우리의 조사 배열은 4KB 페이지를 가정하여, 256 × 4096 byte 배열임. 비순차적 명령어 처리에서 우리는 레지스터 값 '0'에 대해 노이즈 편향을 가짐. 이러한 이유로, 순간적인 명령어 시퀀스에 재시도 로직을 둠. 마지막 mov 명령에서, 곱해진 비밀 값은 조사 배열의 기저 주소에 더해지고, 은닉 채널의 타깃 주소를 형성함. 이 주소는 연관된 캐시 라인을 캐시하기 위해 읽혀짐. 주소는 요청한 코어의 L1 데이터 캐시에 로드될 것이고, 포괄성으로 인해, 또한 다른 코어에 의해서도 읽히는 L3 캐시에도 존재할 것. 그 결과 순간적인 명령어 시퀀스는 앞의 단계에서 읽힌 비밀 값에 기반해 캐시에 영향을 미침. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 마이크로아키텍처 영역의 부채널 공격을 수행하여 비밀 값을 복원. 이는 캐시 상태를 아키텍처 영역의 상태로 옮김. 순간적인 명령어 시퀀스가 실행될 때, 정확히 조사 배열의 한 캐시 라인이 캐시됨. 조사 배열 내의 캐시된 캐시 라인의 위치는 오직 앞에서 읽은 비밀에만 의존함. 따라서, 공격자는 조사 배열의 모든 256 페이지들을 돌며 페이지 상의 모든 첫 번째 캐시 라인에 대한 접근 시간을 측정. 캐시된 캐시 라인을 포함하는 페이지의 번호는 비밀 값과 정확히 일치함.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 마이크로아키텍처 영역의 부채널 공격을 수행하여 비밀 값을 복원. 이는 캐시 상태를 아키텍처 영역의 상태로 옮김. 순간적인 명령어 시퀀스가 실행될 때, 정확히 조사 배열의 한 캐시 라인이 캐시됨. 조사 배열 내의 캐시된 캐시 라인의 위치는 오직 앞에서 읽은 비밀에만 의존함. 따라서, 공격자는 조사 배열의 모든 256 페이지들을 돌며 페이지 상의 모든 첫 번째 캐시 라인에 대한 접근 시간을 측정. 캐시된 캐시 라인을 포함하는 페이지의 번호는 비밀 값과 정확히 일치함.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''시연 영상'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''시연 영상'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>건국대이성민</name></author>	</entry>

	<entry>
		<id>https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104491&amp;oldid=prev</id>
		<title>2019년 6월 21일 (금) 18:17에 대한 건국대이성민의 편집</title>
		<link rel="alternate" type="text/html" href="https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104491&amp;oldid=prev"/>
				<updated>2019-06-21T18:17:14Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2019년 6월 21일 (금) 18:17 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;188번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;188번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[파일:MeltdownCode.png|200px|섬네일|멜트다운의 코드 일러스트]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[파일:MeltdownCode.png|200px|섬네일|멜트다운의 코드 일러스트]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# RCX 레지스터에 적재된 타깃 커널 주소에 위치한 바이트 값을, AL로 나타내어지는 RAX 레지스터의 최하위 바이트로 옮김. MOV 명령어는 코어에 의해 인출되어, 마이크로 연산&amp;lt;ref&amp;gt;하나의 명령어는 여러 개의 마이크로 연산으로서 수행됨.&amp;lt;/ref&amp;gt;으로 해독되고, 할당되어, 리오더 버퍼로 보내짐. 아키텍처의 영역에 속하는 레지스터들(예를 들어 RAX와 RCX)은 비순차적 명령어 처리를 가능케 하는 하위의 물리 레지스터들에 매핑됨. 파이프라인을 가능한 한 최대로 활용하기 위해, 후속 명령어들(shl ~ mov)도 함께 해독되고 마이크로 연산으로 할당됨. 마이크로 연산들은 일치하는 실행 유닛에 의해 실행되기 위해 기다리는, 명령어 대기열로 옮겨짐. 피연산자가 아직 계산되지 않았거나, 실행 유닛이 이미 해당하는 용량을 수용하고 있다면 마이크로 연산의 실행은 지연될 수 있음. 첫 mov 명령어에서 커널 주소가 도착했을 때, 이미 CPU가 후속 명령어들을 비순차적 명령어 처리의 일부로서 보냈을 가능성이 크며, 그들의 마이크로 연산들은 명령어 대기열에서 커널 주소의 내용이 도착하기를 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;기다릴 &lt;/del&gt;것임. 공통 데이터 버스에 인출된 데이터가 도착하는 대로, 마이크로 연산들은 그들의 실행을 시작할 수 있음. 마이크로 연산들이 실행을 끝내면, 그들은 순서대로 완료하며, 그 결과들이 아키텍처 상태에 반영됨. 완료 과정 중에, 명령어의 실행 도중 발생한 어떠한 인터럽트나 예외들이 처리됨. 따라서, 만약 커널 주소를 로드하는 MOV 명령어가 완료한다면, 예외가 등록되고, 비순차적으로 실행된 모든 후속 명령어들의 결과들을 제거하기 위해 파이프라인이 flush될 것. 하지만, 이 예외를 일으키는 것과 공격의 진행 사이엔 경쟁 상태&amp;lt;ref&amp;gt;둘 이상의 입력 또는 조작의 타이밍이나 순서가 결과값에 영향을 줄 수 있는 상태를 말함.&amp;lt;/ref&amp;gt;가 있음. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# RCX 레지스터에 적재된 타깃 커널 주소에 위치한 바이트 값을, AL로 나타내어지는 RAX 레지스터의 최하위 바이트로 옮김. MOV 명령어는 코어에 의해 인출되어, 마이크로 연산&amp;lt;ref&amp;gt;하나의 명령어는 여러 개의 마이크로 연산으로서 수행됨.&amp;lt;/ref&amp;gt;으로 해독되고, 할당되어, 리오더 버퍼로 보내짐. 아키텍처의 영역에 속하는 레지스터들(예를 들어 RAX와 RCX)은 비순차적 명령어 처리를 가능케 하는 하위의 물리 레지스터들에 매핑됨. 파이프라인을 가능한 한 최대로 활용하기 위해, 후속 명령어들(shl ~ mov)도 함께 해독되고 마이크로 연산으로 할당됨. 마이크로 연산들은 일치하는 실행 유닛에 의해 실행되기 위해 기다리는, 명령어 대기열로 옮겨짐. 피연산자가 아직 계산되지 않았거나, 실행 유닛이 이미 해당하는 용량을 수용하고 있다면 마이크로 연산의 실행은 지연될 수 있음. 첫 mov 명령어에서 커널 주소가 도착했을 때, 이미 CPU가 후속 명령어들을 비순차적 명령어 처리의 일부로서 보냈을 가능성이 크며, 그들의 마이크로 연산들은 명령어 대기열에서 커널 주소의 내용이 도착하기를 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;기다리고 있을 &lt;/ins&gt;것임. 공통 데이터 버스에 인출된 데이터가 도착하는 대로, 마이크로 연산들은 그들의 실행을 시작할 수 있음. 마이크로 연산들이 실행을 끝내면, 그들은 순서대로 완료하며, 그 결과들이 아키텍처 상태에 반영됨. 완료 과정 중에, 명령어의 실행 도중 발생한 어떠한 인터럽트나 예외들이 처리됨. 따라서, 만약 커널 주소를 로드하는 MOV 명령어가 완료한다면, 예외가 등록되고, 비순차적으로 실행된 모든 후속 명령어들의 결과들을 제거하기 위해 파이프라인이 flush될 것. 하지만, 이 예외를 일으키는 것과 공격의 진행 사이엔 경쟁 상태&amp;lt;ref&amp;gt;둘 이상의 입력 또는 조작의 타이밍이나 순서가 결과값에 영향을 줄 수 있는 상태를 말함.&amp;lt;/ref&amp;gt;가 있음. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 앞의 단계의 비순차적으로 실행된 명령어 시퀀스는 순간적인 명령어 시퀀스가 되는 방향으로 선택되어야 함. 만약 이들 순간적인 명령어 시퀀스가 MOV 명령어가 완료하기 전에 실행된다면, 그리고 순간적인 명령어 시퀀스가 비밀 데이터를 기반으로 연산을 수행했다면, 이는 비밀을 공격자에게 전달하기 위해 활용될 수 있을 것임. shl 명령어에서 앞의 단계의 비밀 값이 페이지 크기(예를 들어 4KB)로 곱해짐. 비밀의 곱은 배열에의 접근들이 각각 큰 공간적 거리를 둠을 보장함. 이는 하드웨어 프리패처가 캐시에 인접한 메모리 위치를 로딩하는 것을 방지. 여기서, 우리는 한 번에 하나의 바이트씩을 읽으며, 이런 이유로 우리의 조사 배열은 4KB 페이지를 가정하여, 256 × 4096 byte 배열임. 비순차적 명령어 처리에서 우리는 레지스터 값 '0'에 대해 노이즈 편향을 가짐. 이러한 이유로, 순간적인 명령어 시퀀스에 재시도 로직을 둠. 마지막 mov 명령에서, 곱해진 비밀 값은 조사 배열의 기저 주소에 더해지고, 은닉 채널의 타깃 주소를 형성함. 이 주소는 연관된 캐시 라인을 캐시하기 위해 읽혀짐. 주소는 요청한 코어의 L1 데이터 캐시에 로드될 것이고, 포괄성으로 인해, 또한 다른 코어에 의해서도 읽히는 L3 캐시에도 존재할 것. 그 결과 순간적인 명령어 시퀀스는 앞의 단계에서 읽힌 비밀 값에 기반해 캐시에 영향을 미침. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 앞의 단계의 비순차적으로 실행된 명령어 시퀀스는 순간적인 명령어 시퀀스가 되는 방향으로 선택되어야 함. 만약 이들 순간적인 명령어 시퀀스가 MOV 명령어가 완료하기 전에 실행된다면, 그리고 순간적인 명령어 시퀀스가 비밀 데이터를 기반으로 연산을 수행했다면, 이는 비밀을 공격자에게 전달하기 위해 활용될 수 있을 것임. shl 명령어에서 앞의 단계의 비밀 값이 페이지 크기(예를 들어 4KB)로 곱해짐. 비밀의 곱은 배열에의 접근들이 각각 큰 공간적 거리를 둠을 보장함. 이는 하드웨어 프리패처가 캐시에 인접한 메모리 위치를 로딩하는 것을 방지. 여기서, 우리는 한 번에 하나의 바이트씩을 읽으며, 이런 이유로 우리의 조사 배열은 4KB 페이지를 가정하여, 256 × 4096 byte 배열임. 비순차적 명령어 처리에서 우리는 레지스터 값 '0'에 대해 노이즈 편향을 가짐. 이러한 이유로, 순간적인 명령어 시퀀스에 재시도 로직을 둠. 마지막 mov 명령에서, 곱해진 비밀 값은 조사 배열의 기저 주소에 더해지고, 은닉 채널의 타깃 주소를 형성함. 이 주소는 연관된 캐시 라인을 캐시하기 위해 읽혀짐. 주소는 요청한 코어의 L1 데이터 캐시에 로드될 것이고, 포괄성으로 인해, 또한 다른 코어에 의해서도 읽히는 L3 캐시에도 존재할 것. 그 결과 순간적인 명령어 시퀀스는 앞의 단계에서 읽힌 비밀 값에 기반해 캐시에 영향을 미침. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 마이크로아키텍처 영역의 부채널 공격을 수행하여 비밀 값을 복원. 이는 캐시 상태를 아키텍처 영역의 상태로 옮김. 순간적인 명령어 시퀀스가 실행될 때, 정확히 조사 배열의 한 캐시 라인이 캐시됨. 조사 배열 내의 캐시된 캐시 라인의 위치는 오직 앞에서 읽은 비밀에만 의존함. 따라서, 공격자는 조사 배열의 모든 256 페이지들을 돌며 페이지 상의 모든 첫 번째 캐시 라인에 대한 접근 시간을 측정. 캐시된 캐시 라인을 포함하는 페이지의 번호는 비밀 값과 정확히 일치함.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 마이크로아키텍처 영역의 부채널 공격을 수행하여 비밀 값을 복원. 이는 캐시 상태를 아키텍처 영역의 상태로 옮김. 순간적인 명령어 시퀀스가 실행될 때, 정확히 조사 배열의 한 캐시 라인이 캐시됨. 조사 배열 내의 캐시된 캐시 라인의 위치는 오직 앞에서 읽은 비밀에만 의존함. 따라서, 공격자는 조사 배열의 모든 256 페이지들을 돌며 페이지 상의 모든 첫 번째 캐시 라인에 대한 접근 시간을 측정. 캐시된 캐시 라인을 포함하는 페이지의 번호는 비밀 값과 정확히 일치함.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>건국대이성민</name></author>	</entry>

	<entry>
		<id>https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104490&amp;oldid=prev</id>
		<title>2019년 6월 21일 (금) 18:16에 대한 건국대이성민의 편집</title>
		<link rel="alternate" type="text/html" href="https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104490&amp;oldid=prev"/>
				<updated>2019-06-21T18:16:18Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2019년 6월 21일 (금) 18:16 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;188번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;188번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[파일:MeltdownCode.png|200px|섬네일|멜트다운의 코드 일러스트]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[파일:MeltdownCode.png|200px|섬네일|멜트다운의 코드 일러스트]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# RCX 레지스터에 적재된 타깃 커널 주소에 위치한 바이트 값을, AL로 나타내어지는 RAX 레지스터의 최하위 바이트로 옮김. MOV 명령어는 코어에 의해 인출되어, 마이크로 연산&amp;lt;ref&amp;gt;하나의 명령어는 여러 개의 마이크로 연산으로서 수행됨.&amp;lt;/ref&amp;gt;으로 해독되고, 할당되어, 리오더 버퍼로 보내짐. 아키텍처의 영역에 속하는 레지스터들(예를 들어 RAX와 RCX)은 비순차적 명령어 처리를 가능케 하는 하위의 물리 레지스터들에 매핑됨. 파이프라인을 가능한 한 최대로 활용하기 위해, 후속 명령어들(shl ~ mov)도 함께 해독되고 마이크로 연산으로 할당됨. 마이크로 연산들은 일치하는 실행 유닛에 의해 실행되기 위해 기다리는, 명령어 대기열로 옮겨짐. 피연산자가 아직 계산되지 않았거나, 실행 유닛이 이미 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;해당되는 &lt;/del&gt;용량을 수용하고 있다면 마이크로 연산의 실행은 지연될 수 있음. 첫 mov 명령어에서 커널 주소가 도착했을 때, 이미 CPU가 후속 명령어들을 비순차적 명령어 처리의 일부로서 보냈을 가능성이 크며, 그들의 마이크로 연산들은 명령어 대기열에서 커널 주소의 내용이 도착하기를 기다릴 것임. 공통 데이터 버스에 인출된 데이터가 도착하는 대로, 마이크로 연산들은 그들의 실행을 시작할 수 있음. 마이크로 연산들이 실행을 끝내면, 그들은 순서대로 완료하며, 그 결과들이 아키텍처 상태에 반영됨. 완료 과정 중에, 명령어의 실행 도중 발생한 어떠한 인터럽트나 예외들이 처리됨. 따라서, 만약 커널 주소를 로드하는 MOV 명령어가 완료한다면, 예외가 등록되고, 비순차적으로 실행된 모든 후속 명령어들의 결과들을 제거하기 위해 파이프라인이 flush될 것. 하지만, 이 예외를 일으키는 것과 공격의 진행 사이엔 경쟁 상태&amp;lt;ref&amp;gt;둘 이상의 입력 또는 조작의 타이밍이나 순서가 결과값에 영향을 줄 수 있는 상태를 말함.&amp;lt;/ref&amp;gt;가 있음. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# RCX 레지스터에 적재된 타깃 커널 주소에 위치한 바이트 값을, AL로 나타내어지는 RAX 레지스터의 최하위 바이트로 옮김. MOV 명령어는 코어에 의해 인출되어, 마이크로 연산&amp;lt;ref&amp;gt;하나의 명령어는 여러 개의 마이크로 연산으로서 수행됨.&amp;lt;/ref&amp;gt;으로 해독되고, 할당되어, 리오더 버퍼로 보내짐. 아키텍처의 영역에 속하는 레지스터들(예를 들어 RAX와 RCX)은 비순차적 명령어 처리를 가능케 하는 하위의 물리 레지스터들에 매핑됨. 파이프라인을 가능한 한 최대로 활용하기 위해, 후속 명령어들(shl ~ mov)도 함께 해독되고 마이크로 연산으로 할당됨. 마이크로 연산들은 일치하는 실행 유닛에 의해 실행되기 위해 기다리는, 명령어 대기열로 옮겨짐. 피연산자가 아직 계산되지 않았거나, 실행 유닛이 이미 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;해당하는 &lt;/ins&gt;용량을 수용하고 있다면 마이크로 연산의 실행은 지연될 수 있음. 첫 mov 명령어에서 커널 주소가 도착했을 때, 이미 CPU가 후속 명령어들을 비순차적 명령어 처리의 일부로서 보냈을 가능성이 크며, 그들의 마이크로 연산들은 명령어 대기열에서 커널 주소의 내용이 도착하기를 기다릴 것임. 공통 데이터 버스에 인출된 데이터가 도착하는 대로, 마이크로 연산들은 그들의 실행을 시작할 수 있음. 마이크로 연산들이 실행을 끝내면, 그들은 순서대로 완료하며, 그 결과들이 아키텍처 상태에 반영됨. 완료 과정 중에, 명령어의 실행 도중 발생한 어떠한 인터럽트나 예외들이 처리됨. 따라서, 만약 커널 주소를 로드하는 MOV 명령어가 완료한다면, 예외가 등록되고, 비순차적으로 실행된 모든 후속 명령어들의 결과들을 제거하기 위해 파이프라인이 flush될 것. 하지만, 이 예외를 일으키는 것과 공격의 진행 사이엔 경쟁 상태&amp;lt;ref&amp;gt;둘 이상의 입력 또는 조작의 타이밍이나 순서가 결과값에 영향을 줄 수 있는 상태를 말함.&amp;lt;/ref&amp;gt;가 있음. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 앞의 단계의 비순차적으로 실행된 명령어 시퀀스는 순간적인 명령어 시퀀스가 되는 방향으로 선택되어야 함. 만약 이들 순간적인 명령어 시퀀스가 MOV 명령어가 완료하기 전에 실행된다면, 그리고 순간적인 명령어 시퀀스가 비밀 데이터를 기반으로 연산을 수행했다면, 이는 비밀을 공격자에게 전달하기 위해 활용될 수 있을 것임. shl 명령어에서 앞의 단계의 비밀 값이 페이지 크기(예를 들어 4KB)로 곱해짐. 비밀의 곱은 배열에의 접근들이 각각 큰 공간적 거리를 둠을 보장함. 이는 하드웨어 프리패처가 캐시에 인접한 메모리 위치를 로딩하는 것을 방지. 여기서, 우리는 한 번에 하나의 바이트씩을 읽으며, 이런 이유로 우리의 조사 배열은 4KB 페이지를 가정하여, 256 × 4096 byte 배열임. 비순차적 명령어 처리에서 우리는 레지스터 값 '0'에 대해 노이즈 편향을 가짐. 이러한 이유로, 순간적인 명령어 시퀀스에 재시도 로직을 둠. 마지막 mov 명령에서, 곱해진 비밀 값은 조사 배열의 기저 주소에 더해지고, 은닉 채널의 타깃 주소를 형성함. 이 주소는 연관된 캐시 라인을 캐시하기 위해 읽혀짐. 주소는 요청한 코어의 L1 데이터 캐시에 로드될 것이고, 포괄성으로 인해, 또한 다른 코어에 의해서도 읽히는 L3 캐시에도 존재할 것. 그 결과 순간적인 명령어 시퀀스는 앞의 단계에서 읽힌 비밀 값에 기반해 캐시에 영향을 미침. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 앞의 단계의 비순차적으로 실행된 명령어 시퀀스는 순간적인 명령어 시퀀스가 되는 방향으로 선택되어야 함. 만약 이들 순간적인 명령어 시퀀스가 MOV 명령어가 완료하기 전에 실행된다면, 그리고 순간적인 명령어 시퀀스가 비밀 데이터를 기반으로 연산을 수행했다면, 이는 비밀을 공격자에게 전달하기 위해 활용될 수 있을 것임. shl 명령어에서 앞의 단계의 비밀 값이 페이지 크기(예를 들어 4KB)로 곱해짐. 비밀의 곱은 배열에의 접근들이 각각 큰 공간적 거리를 둠을 보장함. 이는 하드웨어 프리패처가 캐시에 인접한 메모리 위치를 로딩하는 것을 방지. 여기서, 우리는 한 번에 하나의 바이트씩을 읽으며, 이런 이유로 우리의 조사 배열은 4KB 페이지를 가정하여, 256 × 4096 byte 배열임. 비순차적 명령어 처리에서 우리는 레지스터 값 '0'에 대해 노이즈 편향을 가짐. 이러한 이유로, 순간적인 명령어 시퀀스에 재시도 로직을 둠. 마지막 mov 명령에서, 곱해진 비밀 값은 조사 배열의 기저 주소에 더해지고, 은닉 채널의 타깃 주소를 형성함. 이 주소는 연관된 캐시 라인을 캐시하기 위해 읽혀짐. 주소는 요청한 코어의 L1 데이터 캐시에 로드될 것이고, 포괄성으로 인해, 또한 다른 코어에 의해서도 읽히는 L3 캐시에도 존재할 것. 그 결과 순간적인 명령어 시퀀스는 앞의 단계에서 읽힌 비밀 값에 기반해 캐시에 영향을 미침. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 마이크로아키텍처 영역의 부채널 공격을 수행하여 비밀 값을 복원. 이는 캐시 상태를 아키텍처 영역의 상태로 옮김. 순간적인 명령어 시퀀스가 실행될 때, 정확히 조사 배열의 한 캐시 라인이 캐시됨. 조사 배열 내의 캐시된 캐시 라인의 위치는 오직 앞에서 읽은 비밀에만 의존함. 따라서, 공격자는 조사 배열의 모든 256 페이지들을 돌며 페이지 상의 모든 첫 번째 캐시 라인에 대한 접근 시간을 측정. 캐시된 캐시 라인을 포함하는 페이지의 번호는 비밀 값과 정확히 일치함.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 마이크로아키텍처 영역의 부채널 공격을 수행하여 비밀 값을 복원. 이는 캐시 상태를 아키텍처 영역의 상태로 옮김. 순간적인 명령어 시퀀스가 실행될 때, 정확히 조사 배열의 한 캐시 라인이 캐시됨. 조사 배열 내의 캐시된 캐시 라인의 위치는 오직 앞에서 읽은 비밀에만 의존함. 따라서, 공격자는 조사 배열의 모든 256 페이지들을 돌며 페이지 상의 모든 첫 번째 캐시 라인에 대한 접근 시간을 측정. 캐시된 캐시 라인을 포함하는 페이지의 번호는 비밀 값과 정확히 일치함.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>건국대이성민</name></author>	</entry>

	<entry>
		<id>https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104488&amp;oldid=prev</id>
		<title>2019년 6월 21일 (금) 18:15에 대한 건국대이성민의 편집</title>
		<link rel="alternate" type="text/html" href="https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104488&amp;oldid=prev"/>
				<updated>2019-06-21T18:15:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2019년 6월 21일 (금) 18:15 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;188번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;188번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[파일:MeltdownCode.png|200px|섬네일|멜트다운의 코드 일러스트]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[파일:MeltdownCode.png|200px|섬네일|멜트다운의 코드 일러스트]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# RCX 레지스터에 적재된 타깃 커널 주소에 위치한 바이트 값을, AL로 나타내어지는 RAX 레지스터의 최하위 바이트로 옮김. MOV 명령어는 코어에 의해 인출되어, 마이크로 연산&amp;lt;ref&amp;gt;하나의 명령어는 여러 개의 마이크로 연산으로서 수행됨.&amp;lt;/ref&amp;gt;으로 해독되고, 할당되어, 리오더 버퍼로 보내짐. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;아키텍처에 &lt;/del&gt;영역에 속하는 레지스터들(예를 들어 RAX와 RCX)은 비순차적 명령어 처리를 가능케 하는 하위의 물리 레지스터들에 매핑됨. 파이프라인을 가능한 한 최대로 활용하기 위해, 후속 명령어들(shl ~ mov)도 함께 해독되고 마이크로 연산으로 할당됨. 마이크로 연산들은 일치하는 실행 유닛에 의해 실행되기 위해 기다리는, 명령어 대기열로 옮겨짐. 피연산자가 아직 계산되지 않았거나, 실행 유닛이 이미 해당되는 용량을 수용하고 있다면 마이크로 연산의 실행은 지연될 수 있음. 첫 mov 명령어에서 커널 주소가 도착했을 때, 이미 CPU가 후속 명령어들을 비순차적 명령어 처리의 일부로서 보냈을 가능성이 크며, 그들의 마이크로 연산들은 명령어 대기열에서 커널 주소의 내용이 도착하기를 기다릴 것임. 공통 데이터 버스에 인출된 데이터가 도착하는 대로, 마이크로 연산들은 그들의 실행을 시작할 수 있음. 마이크로 연산들이 실행을 끝내면, 그들은 순서대로 완료하며, 그 결과들이 아키텍처 상태에 반영됨. 완료 과정 중에, 명령어의 실행 도중 발생한 어떠한 인터럽트나 예외들이 처리됨. 따라서, 만약 커널 주소를 로드하는 MOV 명령어가 완료한다면, 예외가 등록되고, 비순차적으로 실행된 모든 후속 명령어들의 결과들을 제거하기 위해 파이프라인이 flush될 것. 하지만, 이 예외를 일으키는 것과 공격의 진행 사이엔 경쟁 상태&amp;lt;ref&amp;gt;둘 이상의 입력 또는 조작의 타이밍이나 순서가 결과값에 영향을 줄 수 있는 상태를 말함.&amp;lt;/ref&amp;gt;가 있음. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# RCX 레지스터에 적재된 타깃 커널 주소에 위치한 바이트 값을, AL로 나타내어지는 RAX 레지스터의 최하위 바이트로 옮김. MOV 명령어는 코어에 의해 인출되어, 마이크로 연산&amp;lt;ref&amp;gt;하나의 명령어는 여러 개의 마이크로 연산으로서 수행됨.&amp;lt;/ref&amp;gt;으로 해독되고, 할당되어, 리오더 버퍼로 보내짐. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;아키텍처의 &lt;/ins&gt;영역에 속하는 레지스터들(예를 들어 RAX와 RCX)은 비순차적 명령어 처리를 가능케 하는 하위의 물리 레지스터들에 매핑됨. 파이프라인을 가능한 한 최대로 활용하기 위해, 후속 명령어들(shl ~ mov)도 함께 해독되고 마이크로 연산으로 할당됨. 마이크로 연산들은 일치하는 실행 유닛에 의해 실행되기 위해 기다리는, 명령어 대기열로 옮겨짐. 피연산자가 아직 계산되지 않았거나, 실행 유닛이 이미 해당되는 용량을 수용하고 있다면 마이크로 연산의 실행은 지연될 수 있음. 첫 mov 명령어에서 커널 주소가 도착했을 때, 이미 CPU가 후속 명령어들을 비순차적 명령어 처리의 일부로서 보냈을 가능성이 크며, 그들의 마이크로 연산들은 명령어 대기열에서 커널 주소의 내용이 도착하기를 기다릴 것임. 공통 데이터 버스에 인출된 데이터가 도착하는 대로, 마이크로 연산들은 그들의 실행을 시작할 수 있음. 마이크로 연산들이 실행을 끝내면, 그들은 순서대로 완료하며, 그 결과들이 아키텍처 상태에 반영됨. 완료 과정 중에, 명령어의 실행 도중 발생한 어떠한 인터럽트나 예외들이 처리됨. 따라서, 만약 커널 주소를 로드하는 MOV 명령어가 완료한다면, 예외가 등록되고, 비순차적으로 실행된 모든 후속 명령어들의 결과들을 제거하기 위해 파이프라인이 flush될 것. 하지만, 이 예외를 일으키는 것과 공격의 진행 사이엔 경쟁 상태&amp;lt;ref&amp;gt;둘 이상의 입력 또는 조작의 타이밍이나 순서가 결과값에 영향을 줄 수 있는 상태를 말함.&amp;lt;/ref&amp;gt;가 있음. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 앞의 단계의 비순차적으로 실행된 명령어 시퀀스는 순간적인 명령어 시퀀스가 되는 방향으로 선택되어야 함. 만약 이들 순간적인 명령어 시퀀스가 MOV 명령어가 완료하기 전에 실행된다면, 그리고 순간적인 명령어 시퀀스가 비밀 데이터를 기반으로 연산을 수행했다면, 이는 비밀을 공격자에게 전달하기 위해 활용될 수 있을 것임. shl 명령어에서 앞의 단계의 비밀 값이 페이지 크기(예를 들어 4KB)로 곱해짐. 비밀의 곱은 배열에의 접근들이 각각 큰 공간적 거리를 둠을 보장함. 이는 하드웨어 프리패처가 캐시에 인접한 메모리 위치를 로딩하는 것을 방지. 여기서, 우리는 한 번에 하나의 바이트씩을 읽으며, 이런 이유로 우리의 조사 배열은 4KB 페이지를 가정하여, 256 × 4096 byte 배열임. 비순차적 명령어 처리에서 우리는 레지스터 값 '0'에 대해 노이즈 편향을 가짐. 이러한 이유로, 순간적인 명령어 시퀀스에 재시도 로직을 둠. 마지막 mov 명령에서, 곱해진 비밀 값은 조사 배열의 기저 주소에 더해지고, 은닉 채널의 타깃 주소를 형성함. 이 주소는 연관된 캐시 라인을 캐시하기 위해 읽혀짐. 주소는 요청한 코어의 L1 데이터 캐시에 로드될 것이고, 포괄성으로 인해, 또한 다른 코어에 의해서도 읽히는 L3 캐시에도 존재할 것. 그 결과 순간적인 명령어 시퀀스는 앞의 단계에서 읽힌 비밀 값에 기반해 캐시에 영향을 미침. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 앞의 단계의 비순차적으로 실행된 명령어 시퀀스는 순간적인 명령어 시퀀스가 되는 방향으로 선택되어야 함. 만약 이들 순간적인 명령어 시퀀스가 MOV 명령어가 완료하기 전에 실행된다면, 그리고 순간적인 명령어 시퀀스가 비밀 데이터를 기반으로 연산을 수행했다면, 이는 비밀을 공격자에게 전달하기 위해 활용될 수 있을 것임. shl 명령어에서 앞의 단계의 비밀 값이 페이지 크기(예를 들어 4KB)로 곱해짐. 비밀의 곱은 배열에의 접근들이 각각 큰 공간적 거리를 둠을 보장함. 이는 하드웨어 프리패처가 캐시에 인접한 메모리 위치를 로딩하는 것을 방지. 여기서, 우리는 한 번에 하나의 바이트씩을 읽으며, 이런 이유로 우리의 조사 배열은 4KB 페이지를 가정하여, 256 × 4096 byte 배열임. 비순차적 명령어 처리에서 우리는 레지스터 값 '0'에 대해 노이즈 편향을 가짐. 이러한 이유로, 순간적인 명령어 시퀀스에 재시도 로직을 둠. 마지막 mov 명령에서, 곱해진 비밀 값은 조사 배열의 기저 주소에 더해지고, 은닉 채널의 타깃 주소를 형성함. 이 주소는 연관된 캐시 라인을 캐시하기 위해 읽혀짐. 주소는 요청한 코어의 L1 데이터 캐시에 로드될 것이고, 포괄성으로 인해, 또한 다른 코어에 의해서도 읽히는 L3 캐시에도 존재할 것. 그 결과 순간적인 명령어 시퀀스는 앞의 단계에서 읽힌 비밀 값에 기반해 캐시에 영향을 미침. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 마이크로아키텍처 영역의 부채널 공격을 수행하여 비밀 값을 복원. 이는 캐시 상태를 아키텍처 영역의 상태로 옮김. 순간적인 명령어 시퀀스가 실행될 때, 정확히 조사 배열의 한 캐시 라인이 캐시됨. 조사 배열 내의 캐시된 캐시 라인의 위치는 오직 앞에서 읽은 비밀에만 의존함. 따라서, 공격자는 조사 배열의 모든 256 페이지들을 돌며 페이지 상의 모든 첫 번째 캐시 라인에 대한 접근 시간을 측정. 캐시된 캐시 라인을 포함하는 페이지의 번호는 비밀 값과 정확히 일치함.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 마이크로아키텍처 영역의 부채널 공격을 수행하여 비밀 값을 복원. 이는 캐시 상태를 아키텍처 영역의 상태로 옮김. 순간적인 명령어 시퀀스가 실행될 때, 정확히 조사 배열의 한 캐시 라인이 캐시됨. 조사 배열 내의 캐시된 캐시 라인의 위치는 오직 앞에서 읽은 비밀에만 의존함. 따라서, 공격자는 조사 배열의 모든 256 페이지들을 돌며 페이지 상의 모든 첫 번째 캐시 라인에 대한 접근 시간을 측정. 캐시된 캐시 라인을 포함하는 페이지의 번호는 비밀 값과 정확히 일치함.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>건국대이성민</name></author>	</entry>

	<entry>
		<id>https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104487&amp;oldid=prev</id>
		<title>2019년 6월 21일 (금) 18:14에 대한 건국대이성민의 편집</title>
		<link rel="alternate" type="text/html" href="https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104487&amp;oldid=prev"/>
				<updated>2019-06-21T18:14:23Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2019년 6월 21일 (금) 18:14 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;170번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;170번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 스펙터의 두 번째 이형에서 공격자는 ROP&amp;lt;ref&amp;gt;반환 지향형 프로그래밍. 이 기법에서 공격자는 프로그램의 제어 흐름을 하이재킹하기 위해 호출 스택의 제어를 얻고, '가젯'이라 불리는 신중히 선택된 기계어들을 실행함. 각 가젯은 일반적으로 연결됨으로써 의미를 구현하는 몇몇 명령어들과 함께 마지막에 반환 명령어(ret)로 끝남.&amp;lt;/ref&amp;gt; 공격의 활용으로서, 목표 프로세스의 주소 공간에서 가젯을 선택하고, 목표가 가젯을 추측 실행하도록 유도함. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 스펙터의 두 번째 이형에서 공격자는 ROP&amp;lt;ref&amp;gt;반환 지향형 프로그래밍. 이 기법에서 공격자는 프로그램의 제어 흐름을 하이재킹하기 위해 호출 스택의 제어를 얻고, '가젯'이라 불리는 신중히 선택된 기계어들을 실행함. 각 가젯은 일반적으로 연결됨으로써 의미를 구현하는 몇몇 명령어들과 함께 마지막에 반환 명령어(ret)로 끝남.&amp;lt;/ref&amp;gt; 공격의 활용으로서, 목표 프로세스의 주소 공간에서 가젯을 선택하고, 목표가 가젯을 추측 실행하도록 유도함. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 자신이 선택한 위치에서 추측 실행이 진행되게 하기 위해 분기 예측기를 악성 목적지로 훈련시킴. 분기 타깃 버퍼&amp;lt;ref&amp;gt;분기 예측에 사용되는 프로세서 구성 요소로 분기 명령의 위치와 해당 명령의 타깃 주소를 담고 있음.&amp;lt;/ref&amp;gt;를 훈련시키기 위해, 공격자는 목표 프로세스의 주소 공간에서 가젯의 가상 주소를 찾고, 이 주소에 대해 간접 분기&amp;lt;ref&amp;gt;다음 실행할 명령어의 주소를 직접 명시하는 대신, 주소가 위치한 곳을 명시하는 인수를 갖는 프로그램 제어 명령어 유형.&amp;lt;/ref&amp;gt;를 수행. 이 훈련은 공격자의 주소 공간에서 이루어짐. 공격자의 주소 공간의 가젯 주소 위치에 무엇이 상주하는지는 문제되지 않으며, 요구되는 조건의 전부는 훈련 중 공격자의 가상 주소들이 목표의 그것들과 일치해야 한다는 점뿐임. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 자신이 선택한 위치에서 추측 실행이 진행되게 하기 위해 분기 예측기를 악성 목적지로 훈련시킴. 분기 타깃 버퍼&amp;lt;ref&amp;gt;분기 예측에 사용되는 프로세서 구성 요소로 분기 명령의 위치와 해당 명령의 타깃 주소를 담고 있음.&amp;lt;/ref&amp;gt;를 훈련시키기 위해, 공격자는 목표 프로세스의 주소 공간에서 가젯의 가상 주소를 찾고, 이 주소에 대해 간접 분기&amp;lt;ref&amp;gt;다음 실행할 명령어의 주소를 직접 명시하는 대신, 주소가 위치한 곳을 명시하는 인수를 갖는 프로그램 제어 명령어 유형.&amp;lt;/ref&amp;gt;를 수행. 이 훈련은 공격자의 주소 공간에서 이루어짐. 공격자의 주소 공간의 가젯 주소 위치에 무엇이 상주하는지는 문제되지 않으며, 요구되는 조건의 전부는 훈련 중 공격자의 가상 주소들이 목표의 그것들과 일치해야 한다는 점뿐임. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자가 선택한 위치에서 추측 실행이 진행된다면 주목할 만한 부수 효과들을 남길 수 있을 것인데, 공격 가능한 조건 분기 예측 실패가 없는 상황에서도 목표 프로세스 메모리를 노출시킬 수 있기 때문에, 이 방법은 공격자에게 매우 강력한 수단이 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;되어줌&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자가 선택한 위치에서 추측 실행이 진행된다면 주목할 만한 부수 효과들을 남길 수 있을 것인데, 공격 가능한 조건 분기 예측 실패가 없는 상황에서도 목표 프로세스 메모리를 노출시킬 수 있기 때문에, 이 방법은 공격자에게 매우 강력한 수단이 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;됨&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====멜트다운====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====멜트다운====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>건국대이성민</name></author>	</entry>

	<entry>
		<id>https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104439&amp;oldid=prev</id>
		<title>2019년 6월 21일 (금) 16:59에 대한 건국대이성민의 편집</title>
		<link rel="alternate" type="text/html" href="https://dh.aks.ac.kr/Edu/wiki/index.php?title=CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8&amp;diff=104439&amp;oldid=prev"/>
				<updated>2019-06-21T16:59:55Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2019년 6월 21일 (금) 16:59 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;189번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;189번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# RCX 레지스터에 적재된 타깃 커널 주소에 위치한 바이트 값을, AL로 나타내어지는 RAX 레지스터의 최하위 바이트로 옮김. MOV 명령어는 코어에 의해 인출되어, 마이크로 연산&amp;lt;ref&amp;gt;하나의 명령어는 여러 개의 마이크로 연산으로서 수행됨.&amp;lt;/ref&amp;gt;으로 해독되고, 할당되어, 리오더 버퍼로 보내짐. 아키텍처에 영역에 속하는 레지스터들(예를 들어 RAX와 RCX)은 비순차적 명령어 처리를 가능케 하는 하위의 물리 레지스터들에 매핑됨. 파이프라인을 가능한 한 최대로 활용하기 위해, 후속 명령어들(shl ~ mov)도 함께 해독되고 마이크로 연산으로 할당됨. 마이크로 연산들은 일치하는 실행 유닛에 의해 실행되기 위해 기다리는, 명령어 대기열로 옮겨짐. 피연산자가 아직 계산되지 않았거나, 실행 유닛이 이미 해당되는 용량을 수용하고 있다면 마이크로 연산의 실행은 지연될 수 있음. 첫 mov 명령어에서 커널 주소가 도착했을 때, 이미 CPU가 후속 명령어들을 비순차적 명령어 처리의 일부로서 보냈을 가능성이 크며, 그들의 마이크로 연산들은 명령어 대기열에서 커널 주소의 내용이 도착하기를 기다릴 것임. 공통 데이터 버스에 인출된 데이터가 도착하는 대로, 마이크로 연산들은 그들의 실행을 시작할 수 있음. 마이크로 연산들이 실행을 끝내면, 그들은 순서대로 완료하며, 그 결과들이 아키텍처 상태에 반영됨. 완료 과정 중에, 명령어의 실행 도중 발생한 어떠한 인터럽트나 예외들이 처리됨. 따라서, 만약 커널 주소를 로드하는 MOV 명령어가 완료한다면, 예외가 등록되고, 비순차적으로 실행된 모든 후속 명령어들의 결과들을 제거하기 위해 파이프라인이 flush될 것. 하지만, 이 예외를 일으키는 것과 공격의 진행 사이엔 경쟁 상태&amp;lt;ref&amp;gt;둘 이상의 입력 또는 조작의 타이밍이나 순서가 결과값에 영향을 줄 수 있는 상태를 말함.&amp;lt;/ref&amp;gt;가 있음. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# RCX 레지스터에 적재된 타깃 커널 주소에 위치한 바이트 값을, AL로 나타내어지는 RAX 레지스터의 최하위 바이트로 옮김. MOV 명령어는 코어에 의해 인출되어, 마이크로 연산&amp;lt;ref&amp;gt;하나의 명령어는 여러 개의 마이크로 연산으로서 수행됨.&amp;lt;/ref&amp;gt;으로 해독되고, 할당되어, 리오더 버퍼로 보내짐. 아키텍처에 영역에 속하는 레지스터들(예를 들어 RAX와 RCX)은 비순차적 명령어 처리를 가능케 하는 하위의 물리 레지스터들에 매핑됨. 파이프라인을 가능한 한 최대로 활용하기 위해, 후속 명령어들(shl ~ mov)도 함께 해독되고 마이크로 연산으로 할당됨. 마이크로 연산들은 일치하는 실행 유닛에 의해 실행되기 위해 기다리는, 명령어 대기열로 옮겨짐. 피연산자가 아직 계산되지 않았거나, 실행 유닛이 이미 해당되는 용량을 수용하고 있다면 마이크로 연산의 실행은 지연될 수 있음. 첫 mov 명령어에서 커널 주소가 도착했을 때, 이미 CPU가 후속 명령어들을 비순차적 명령어 처리의 일부로서 보냈을 가능성이 크며, 그들의 마이크로 연산들은 명령어 대기열에서 커널 주소의 내용이 도착하기를 기다릴 것임. 공통 데이터 버스에 인출된 데이터가 도착하는 대로, 마이크로 연산들은 그들의 실행을 시작할 수 있음. 마이크로 연산들이 실행을 끝내면, 그들은 순서대로 완료하며, 그 결과들이 아키텍처 상태에 반영됨. 완료 과정 중에, 명령어의 실행 도중 발생한 어떠한 인터럽트나 예외들이 처리됨. 따라서, 만약 커널 주소를 로드하는 MOV 명령어가 완료한다면, 예외가 등록되고, 비순차적으로 실행된 모든 후속 명령어들의 결과들을 제거하기 위해 파이프라인이 flush될 것. 하지만, 이 예외를 일으키는 것과 공격의 진행 사이엔 경쟁 상태&amp;lt;ref&amp;gt;둘 이상의 입력 또는 조작의 타이밍이나 순서가 결과값에 영향을 줄 수 있는 상태를 말함.&amp;lt;/ref&amp;gt;가 있음. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 앞의 단계의 비순차적으로 실행된 명령어 시퀀스는 순간적인 명령어 시퀀스가 되는 방향으로 선택되어야 함. 만약 이들 순간적인 명령어 시퀀스가 MOV 명령어가 완료하기 전에 실행된다면, 그리고 순간적인 명령어 시퀀스가 비밀 데이터를 기반으로 연산을 수행했다면, 이는 비밀을 공격자에게 전달하기 위해 활용될 수 있을 것임. shl 명령어에서 앞의 단계의 비밀 값이 페이지 크기(예를 들어 4KB)로 곱해짐. 비밀의 곱은 배열에의 접근들이 각각 큰 공간적 거리를 둠을 보장함. 이는 하드웨어 프리패처가 캐시에 인접한 메모리 위치를 로딩하는 것을 방지. 여기서, 우리는 한 번에 하나의 바이트씩을 읽으며, 이런 이유로 우리의 조사 배열은 4KB 페이지를 가정하여, 256 × &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;4096bytes임&lt;/del&gt;. 비순차적 명령어 처리에서 우리는 레지스터 값 '0'에 대해 노이즈 편향을 가짐. 이러한 이유로, 순간적인 명령어 시퀀스에 재시도 로직을 둠. 마지막 mov 명령에서, 곱해진 비밀 값은 조사 배열의 기저 주소에 더해지고, 은닉 채널의 타깃 주소를 형성함. 이 주소는 연관된 캐시 라인을 캐시하기 위해 읽혀짐. 주소는 요청한 코어의 L1 데이터 캐시에 로드될 것이고, 포괄성으로 인해, 또한 다른 코어에 의해서도 읽히는 L3 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;코어에도 &lt;/del&gt;존재할 것. 그 결과 순간적인 명령어 시퀀스는 앞의 단계에서 읽힌 비밀 값에 기반해 캐시에 영향을 미침. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 앞의 단계의 비순차적으로 실행된 명령어 시퀀스는 순간적인 명령어 시퀀스가 되는 방향으로 선택되어야 함. 만약 이들 순간적인 명령어 시퀀스가 MOV 명령어가 완료하기 전에 실행된다면, 그리고 순간적인 명령어 시퀀스가 비밀 데이터를 기반으로 연산을 수행했다면, 이는 비밀을 공격자에게 전달하기 위해 활용될 수 있을 것임. shl 명령어에서 앞의 단계의 비밀 값이 페이지 크기(예를 들어 4KB)로 곱해짐. 비밀의 곱은 배열에의 접근들이 각각 큰 공간적 거리를 둠을 보장함. 이는 하드웨어 프리패처가 캐시에 인접한 메모리 위치를 로딩하는 것을 방지. 여기서, 우리는 한 번에 하나의 바이트씩을 읽으며, 이런 이유로 우리의 조사 배열은 4KB 페이지를 가정하여, 256 × &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;4096 byte 배열임&lt;/ins&gt;. 비순차적 명령어 처리에서 우리는 레지스터 값 '0'에 대해 노이즈 편향을 가짐. 이러한 이유로, 순간적인 명령어 시퀀스에 재시도 로직을 둠. 마지막 mov 명령에서, 곱해진 비밀 값은 조사 배열의 기저 주소에 더해지고, 은닉 채널의 타깃 주소를 형성함. 이 주소는 연관된 캐시 라인을 캐시하기 위해 읽혀짐. 주소는 요청한 코어의 L1 데이터 캐시에 로드될 것이고, 포괄성으로 인해, 또한 다른 코어에 의해서도 읽히는 L3 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;캐시에도 &lt;/ins&gt;존재할 것. 그 결과 순간적인 명령어 시퀀스는 앞의 단계에서 읽힌 비밀 값에 기반해 캐시에 영향을 미침. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 마이크로아키텍처 영역의 부채널 공격을 수행하여 비밀 값을 복원. 이는 캐시 상태를 아키텍처 영역의 상태로 옮김. 순간적인 명령어 시퀀스가 실행될 때, 정확히 조사 배열의 한 캐시 라인이 캐시됨. 조사 배열 내의 캐시된 캐시 라인의 위치는 오직 앞에서 읽은 비밀에만 의존함. 따라서, 공격자는 조사 배열의 모든 256 페이지들을 돌며 페이지 상의 모든 첫 번째 캐시 라인에 대한 접근 시간을 측정. 캐시된 캐시 라인을 포함하는 페이지의 번호는 비밀 값과 정확히 일치함.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 공격자는 마이크로아키텍처 영역의 부채널 공격을 수행하여 비밀 값을 복원. 이는 캐시 상태를 아키텍처 영역의 상태로 옮김. 순간적인 명령어 시퀀스가 실행될 때, 정확히 조사 배열의 한 캐시 라인이 캐시됨. 조사 배열 내의 캐시된 캐시 라인의 위치는 오직 앞에서 읽은 비밀에만 의존함. 따라서, 공격자는 조사 배열의 모든 256 페이지들을 돌며 페이지 상의 모든 첫 번째 캐시 라인에 대한 접근 시간을 측정. 캐시된 캐시 라인을 포함하는 페이지의 번호는 비밀 값과 정확히 일치함.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''시연 영상'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* '''시연 영상'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>건국대이성민</name></author>	</entry>

	</feed>