Menu Zavřít

Poradna: Co přinese zákon o kyberbezpečnosti?

25. 2. 2015
Autor: Ministerio TIC Colombia, Flickr.com (CC BY 2.0)

Sleduji dění kolem zákona o kybernetické bezpečnosti. Stále mi ale není jasné, jaké novinky pro mě jako podnikatele přinese. Tomáš M., Praha

Zákon č. 181/2014 Sb., o kybernetické bezpečnosti, je účinný od 1. 1. 2015. Zákon by měl teoreticky posílit kybernetickou bezpečnost naší země a sloužit jako ochrana před útoky na její klíčové informační systémy a sítě. Vztahuje se proto především na systémy veřejné správy, dotkne se ale i některých soukromých právnických osob, především těch, které spravují nejdůležitější informační a komunikační systémy.

Tyto budou mít povinnost například hlásit bezpečnostní incidenty a provádět reaktivní protiopatření. Hlavním garantem kybernetické bezpečnosti bude Národní bezpečnostní úřad (NBÚ), zákon však počítá i se vznikem takzvaného národního CERT (Computer Emergency Response Team), jehož provozovatelem bude právnická osoba, která bude provádět dohled v soukromé sféře a přijímat podněty zejména od poskytovatelů služeb elektronických komunikací a subjektů zajišťujících sítě elektronických komunikací. Vedle něj zákon ustanovuje takzvaný vládní CERT, který vedle dohledu a poradenství v rámci státní správy dohlíží i na správce informačního nebo komunikačního systému kritické informační infrastruktury. Tento je zároveň pracovištěm NBÚ.

Ptejte se odborníků zadarmo:
Své dotazy ohledně podnikání nám můžete psát na email: svihel@mf.cz

Kterých soukromých osob se zákon nejvíce dotkne? Povinnými osobami budou poskytovatelé služeb elektronických komunikací a subjekty zajišťující sítě elektronických komunikací, například tedy poskytovatelé internetového připojení. Pokud podnikatelé spravují určitý důležitý informační nebo komunikační systém, takzvanou významnou síť (zajišťující přímé zahraniční propojení do veřejných komunikačních sítí nebo přímé připojení ke kritické informační infrastruktuře), zákon se jich dotkne ještě výrazněji. Kromě hlášení kontaktních údajů budou muset zároveň detekovat kybernetické bezpečnostní události, hlásit bezpečnostní incidenty a provádět bezpečnostní opatření umožněná NBÚ. Ta budou právně závazná okamžikem vydání, přičemž odvolání proti nim nemá žádný odkladný účinek. Kdo přesně bude zákonu z této skupiny podléhat, se bude odvíjet od nařízení vlády schváleného dne 8. 12. 2014, kterým se mění nařízení vlády č. 432/2010 Sb., o kritériích pro určení prvku kritické infrastruktury. Nařízení určuje však pouze kritéria pro to, kdo se bude muset kybernetickým zákonem řídit. Konkrétní rozhodnutí pak bude záležet na opatření obecné povahy vydaném příslušným ministerstvem či NBÚ.

Jaké jsou výhody a nevýhody? Nejvyšším přínosem normy je určitě zavedení informačních povinností, které umožní soustředění podstatných informací odůvodňujících přijetí případných opatření na jednom místě. Co se týče řešení konkrétních útoků, zákon zůstává velmi obecný (a nelze ani očekávat, že by mohl nabízet řešení pro každou situaci) a až praxe ukáže, zda výsledkem legislativy nebude pouze další administrativní zátěž pro poskytovatele telekomunikačních služeb bez reálného zlepšení bezpečnosti kybernetického prostoru.

Autor je advokát a partner Taylor Wessing e/n/w/c advokáti

Přečtěte si i další odpovědi na dotazy čtenářů:

Složitá administrativa práce z domova

WT100_25

Co se změní v zákoníku práce?

Danění dlužné částky

  • Našli jste v článku chybu?
'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }